ここから本文です

vbaで以下のような処理についてコードを組みたいのですが、思うようにできません。...

yas********さん

2019/4/1615:16:33

vbaで以下のような処理についてコードを組みたいのですが、思うようにできません。例は以下の通りです。

sheet(1)に範囲はA1〜B30、A列には1〜30までの番号、B列にはそれに対する文字列(例

えばハーブ名)が入っているものとします。各ハーブ名に特定の番号(この番号がA列の数字)を登録してあります。sheet(2)のE列に任意のハーブ名、F列にその効能が入力されています。sheet(2)のE列の並びをsheet(1)のB列と同じにしたいのとかつ並び変えたときにそれに対するF列の効能もついてくるようなコードを作りたいのです。

ちなみに私は超初級者です。どなた様かにお知恵を拝借いたしたく存じます。よろしくお願いします。

閲覧数:
32
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

tra********さん

2019/4/1619:30:05

sheet(2)のE列・F列は1行目からデータが始まっている前提です。

Sub 一例()
Dim xAry As String, xRng As Range
With Worksheets("sheet(1)")
xAry = Join(Application.Transpose(.Range("B1", .Cells(Rows.Count, 2).End(xlUp))), ",")
End With

With Worksheets("sheet(2)")
Set xRng = .Range("E1", .Cells(Rows.Count, "F").End(xlUp))
With .Sort
.SortFields.Clear
.SortFields.Add Key:=xRng.Columns(1), _
SortOn:=xlSortOnValues, Order:=xlAscending, _
CustomOrder:="""," & xAry & """", DataOption:=xlSortNormal
.SetRange xRng
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.Apply
End With
End With
End Sub

  • 質問者

    yas********さん

    2019/4/2222:58:40

    ご回答ありがとうございます。試しましたところ一瞬にして処理されるのはすごいのですが、文字列だけが移動して罫線は一緒に移動せず前の場所に残ったままです。一緒に移動して移動前の場所に罫線が残らないようにするにはどうすればよろしいでしょうか?ご教示願います。

  • その他の返信(2件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

tad********さん

2019/4/1615:55:12

For i = 1 To 30
r = Sheets("Sheet2").Range("E:E").Find(Sheets("Sheet1").Range("B" & i), lookat:=xlWhole).Row
If i <> r Then
Sheets("Sheet2").Range("E" & r & ":F" & r).Cut
Sheets("Sheet2").Range("E" & i).Insert Shift:=xlDown
End If
Next

名前の文字が違う場合、Sheet2に無かった場合の処理はしていません。

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる