
Excelのuserformのtextboxに入力された番号をA列から検索して
該当する行を別シートに転記するVBAを教えてください。
A列の番号は昇順で並んでおり、同じ番号は最大10回続きます。
同じ番号ならB列からE列は列ごとに同じ文字が入ります。
1行目は項目名が入り、番号は2行目からです。
Sheet1
A B C D E F G H I J K
1
2 760 z b s h い ろ は に ほ へ
3 760 z b s h と ち り ぬ る を
4 760 z b s h わ か よ た れ そ
5 761 x n d j あ い う え お か
6 761 x n d j き く け こ さ し
7 762 v m f k ぬ ね の は ひ ふ
8 762 v m f k へ ほ ま み む め
9 762 v m f k も や ゆ よ ら り
10 762 v m f k る れ ろ わ を ん
・
・
・
760番を検索・転記する場合、Sheet2 A列に下記のように転記したいです。
1行目~3行目までは空欄
4行目はSheet1 D列の文字
5行目はSheet1 E列の文字
6行目以降はSheet1 F列~K列を行列入れ替えて縦一列に
Sheet2
A
1
2
3
4 s
5 h
6 い
7 ろ
8 は
9 に
10 ほ
11 へ
12 と
13 ち
14 り
15 ぬ
16 る
17 を
・ ・
・ ・
・ ・
例えば次に762番を検索・転記する場合、Sheet2にある文字は全部削除されて
A列4行目から同じように転記したいです。
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
>もし検索した番号がなかった場合
>該当番号がありませんというmsgboxを表示したいのですが
>教えていただけますでしょうか。
以下のようにしてください。
No1のは破棄してください。
Private Sub CommandButton1_Click()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim maxrow As Long
Dim srow As Long: srow = 0
Dim erow As Long: erow = 0
Dim row1 As Long
Dim row2 As Long
Dim sval As String
If TextBox1.Value = "" Then Exit Sub
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
sh2.Cells.ClearContents
maxrow = sh1.Cells(Rows.Count, "A").End(xlUp).Row
For row1 = 2 To maxrow
sval = sh1.Cells(row1, "A").Value
If sval = TextBox1.Value Then
If srow = 0 Then srow = row1
erow = row1
End If
Next
If srow = 0 Then
MsgBox ("該当番号がありません")
Exit Sub
End If
sh2.Cells(4, "A").Value = sh1.Cells(srow, "D").Value
sh2.Cells(5, "A").Value = sh1.Cells(srow, "E").Value
row2 = 6
For row1 = srow To erow
sh2.Cells(row2, "A").Resize(6, 1).Value = WorksheetFunction.Transpose(sh1.Cells(row1, "F").Resize(1, 6))
row2 = row2 + 6
Next
End Sub
No.1
- 回答日時:
マクロを実行するトリガーが不明なので、コマンドボタンをクリックされた時と仮定して、作成しました。
もし、トリガーが他の場合は、プロシージャ名をそのように変えてください。
Private Sub CommandButton1_Click()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim maxrow As Long
Dim srow As Long: srow = 0
Dim erow As Long: erow = 0
Dim row1 As Long
Dim row2 As Long
Dim sval As String
If TextBox1.Value = "" Then Exit Sub
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
sh2.Cells.ClearContents
maxrow = sh1.Cells(Rows.Count, "A").End(xlUp).Row
For row1 = 2 To maxrow
sval = sh1.Cells(row1, "A").Value
If sval = TextBox1.Value Then
If srow = 0 Then srow = row1
erow = row1
End If
Next
If srow = 0 Then Exit Sub
sh2.Cells(4, "A").Value = sh1.Cells(srow, "D").Value
sh2.Cells(5, "A").Value = sh1.Cells(srow, "E").Value
row2 = 6
For row1 = srow To erow
sh2.Cells(row2, "A").Resize(6, 1).Value = WorksheetFunction.Transpose(sh1.Cells(row1, "F").Resize(1, 6))
row2 = row2 + 6
Next
End Sub
ご回答ありがとうございます。
完璧にできました!
可能であれば、もう一点教えていただきたいのですが、
もし検索した番号がなかった場合
該当番号がありませんというmsgboxを表示したいのですが
教えていただけますでしょうか。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
土日の列幅の自動変更を教えて...
-
VBAで結合セルを転記する法を教...
-
エクセルで離れた列を選択して...
-
LEFT関数とIF関数の組み合わせ...
-
列方向、行方向の定義
-
VLOOKUPの列番号の最大は?
-
エクセル 文字列を日付に変更...
-
EXCELでデータの更新した後の列...
-
VBA 指定した列にある日時デー...
-
リストからデータを紐付けしたい
-
Excel文字列一括変換
-
列を1つずつ非表示にしたい
-
最終行に合計(最終行が列によ...
-
Excelの行数、列数を増やしたい...
-
Excel 区切り位置指定ウィザー...
-
エクセルで住所を県と市・郡と...
-
excelについて。
-
アクセス 取り込み時に、桁数(...
-
CSVファイルの「0落ち」にVBA
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
Excelの行数、列数を増やしたい...
-
VLOOKUPの列番号の最大は?
-
vba マージエリアの行数を非表...
-
列方向、行方向の定義
-
VBA 指定した列にある日時デー...
-
エクセル マクロ 範囲指定で...
-
Alt+Shift+↑を一括で行うには、...
-
LEFT関数とIF関数の組み合わせ...
-
横軸を日付・時間とするグラフ化
-
Excel文字列一括変換
-
VBAで結合セルを転記する法を教...
-
最近急にVBAの処理速度が遅くな...
-
EXCEL VBA 文字列から電話番号...
-
CSVファイルの「0落ち」にVBA
-
VBAで別ブックの列を検索し、該...
-
リストからデータを紐付けしたい
-
エクセルで最初の行や列を開け...
-
ListViewで列を指定して表示さ...
おすすめ情報