• 締切済み

必要なデータを抽出したい

必要なデータを抽出したい    A   B    C   D ・・・ 1 7/1   101   102  103 2 7/2   101   103 3 7/3   105   203 4 7/4   103   205 5 7/5   101   202 ・ ・    ・ ・ ・    ・ ・ ・    ・ Excelで上の様にA列に日付、B行列以降に数字が書かれているシートから、抽出したい数字が含まれている行を別シートに抽出するマクロはどのように書けばよろしいのでしょうか。 技術者の方、よろしくお願いします。 例えば、101が含まれているデータを抽出したら、sheet2に    A   B    C   D 1 7/1   101   102  103 2 7/2   101   103 3 7/5   101   202 となるようにしたいのです。

みんなの回答

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.5

NO3です。 B列以降も検索コードがある事を失念していましたので訂正します。 <サンプルコード> Sub シート1を検索して結果をシート2() Dim key As Integer key = InputBox("抽出コードを入力して下さい。", "抽出コードの入力") b = 1 For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row For k = 2 To Cells(i, Columns.Count).End(xlToLeft).Column If Cells(i, k) = key Then Sheet1.Rows(i).Copy Destination:=Sheet2.Rows(b) b = b + 1 Exit For End If Next Next End Sub

  • banzaiA
  • ベストアンサー率16% (100/595)
回答No.4

回答というより、 補足説明の要請です。 >抽出したい数字がふくまれている というのは、例ではB列だけですが、C列以降にもあるのかどうか? つまり抽出する数字は、B列だけを探せばいいのかを教えて下さい。

noname#121028
質問者

補足

>>例ではB列だけですが、C列以降にもあるのかどうか? C列以降にもあります

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

一例です。 データをシート1、抽出をシート2として、抽出コードを入力する方法です。 シート1タブ上で右クリック→コードの表示→以下のサンプルコードを貼り付けてマクロ実行してください。 Sub シート1を検索して結果をシート2() Dim key As Integer key = InputBox("抽出コードを入力して下さい。", "抽出コードの入力") b = 1 For Each a In Sheet1.Range("B:B") If a.Value = key Then Sheet1.Rows(a.Row).Copy Destination:=Sheet2.Rows(b) b = b + 1 End If Next End Sub

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です! たびたびごめんなさい。 前回のコードでは後半部分に間違いがありましたので 正確に表示されないと思います。 ↓のコードに訂正してみてください。 Sub test() Dim i, j As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") Set ws2 = Worksheets("sheet2") For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row For j = 1 To ws1.Cells(i, Columns.Count).End(xlToLeft).Column If ws2.Cells(1, 1) = "" Then Exit Sub If WorksheetFunction.CountIf(ws1.Rows(i), ws2.Cells(1, 1)) Then ws2.Cells(i + 1, j) = ws1.Cells(i, j) End If ws2.Cells(i + 1, 1).NumberFormatLocal = "m/d" Next j Next i Dim k As Long For k = ws2.Cells(Rows.Count, 1).End(xlUp).Row To 3 Step -1 If WorksheetFunction.Count(ws2.Rows(k)) = 0 Then ws2.Rows(k).Delete (xlUp) End If Next k End Sub 以上、何度も失礼しました。m(__)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんにちは! 当方は技術者ではありませんが・・・(建築関係の技術職ではあります) ↓の画像のような配置の場合のコードです。 Sheet2のA1セルに検索したい値を入力すればその行が表示されると思います。 Sub test() Dim i, j As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") Set ws2 = Worksheets("sheet2") For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row For j = 1 To ws1.Cells(i, Columns.Count).End(xlToLeft).Column If ws2.Cells(1, 1) = "" Then Exit Sub If WorksheetFunction.CountIf(ws1.Rows(i), ws2.Cells(1, 1)) Then ws2.Cells(i + 1, j) = ws1.Cells(i, j) End If ws2.Cells(i + 1, 1).NumberFormatLocal = "m/d" Next j Next i Dim m, n As Long For m = ws2.Cells(Rows.Count, 1).End(xlUp).Row To 3 Step -1 For n = 1 To ws2.UsedRange.Columns.Count If ws2.Cells(m, n) = "" Then ws2.Cells(m, n).Delete (xlUp) End If Next n Next m End Sub 以上、かなり無理やりって感じのコードですので 他に良い方法があれば読み流してくださいね。m(__)m

関連するQ&A