- 締切済み
EXCEL2010 マクロにつきまして
excel vbaでマクロが作りたいのですが、まったくの初心者で 試行錯誤していますが、なかなか出来ずに困っています。 どなたか、教えていただけませんでしょうか。 ○sheet1 --日付---|A-B-C -------------------- 2013/1/20|1 2 3 2013/1/21|4 5 6 2013/1/22|7 8 9 2013/1/23|5 4 3 2013/1/24|4 5 6 2013/1/25|4 4 4 2013/1/26 ・ ・ ・ ○sheet2 実行ボタンを作成 日付を入力して実行ボタンをクリックすると指定した日付のデータが抽出される 例 2013/1/22 → 実行 A B C ------- 7 8 9 このようなマクロを組みたいのです。 わかりづらくて申し訳ありません。 また、初心者向けのおすすめの参考書や、ホームページがありましたら 教えて頂けると助かります。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
時間かかって、やっと出来ました。すでに回答がありますが、回答させてください。 下のマクロをコピーしてあなたのマクロを作って、キーの指定をコントロール+ e としてください。 そして 第2シートのA2iに日付を入れてから、コントロールキーを押しながら同時に e キーを押すと、希望のデータが第2シートのB2,C2,D2にえられます。 あなたのマクロの作り方ですが、 1 メニューバーのツールを選び、マクロの新しいマクロの記録を選び、開始OKにしてすぐ終了にします。 2 メニューバーのツールを選び、マクロのマクロを選び先に記録したマクロを編集するにします。 3 私のマクロをこぴーしてあなたのマクロに貼り付けます。 4 保存します Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2013/1/20 ユーザー名 : ' ' Keyboard Shortcut: Ctrl+e ' 'Worksheets(1).Activate Dim mygyo As Integer For mygyo = 2 To 7 If Worksheets(1).Cells(mygyo, 1) = Worksheets(2).Cells(2, 1) Then Worksheets(2).Cells(2, 2) = Worksheets(1).Cells(mygyo, 2) Worksheets(2).Cells(2, 3) = Worksheets(1).Cells(mygyo, 3) Worksheets(2).Cells(2, 4) = Worksheets(1).Cells(mygyo, 4) Else End If Next End Sub 第1シートのデータの数が多い場合は上のプログラムの下から9行目の7を合わせるよう訂正してください。 参考書はエクセルのVBAをキーワードにして沢山ありますからあなたが理解できるものを選んでください。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! なかなか回答がつかないようなので・・・ 質問にある、Sheet1のA・B・Cは列番号ではなく、項目と判断して良いのですよね? そうであれば↓の画像のような配置だと解釈しての一例です。 Sheet1のA列に重複データはないという前提です。 画像通りの配置でOKであれば、関数だけで大丈夫だと思います。 Sheet2のA3セルに =IF($A$1="","",VLOOKUP($A$1,Sheet1!$A:$D,COLUMN(B1),0)) という数式を入れ、列方向へオートフィルでコピー! これだけで良いと思います。 どうしてもVBAでやりたいのであれば >実行ボタンを作成 >日付を入力して実行ボタンをクリックすると指定した日付のデータが抽出される を考慮すると Sheet2の 開発 → 挿入 → ActiveXコントロール → コマンドボタン を配置 挿入したコマンドボタン上でダブルクリック → VBE画面に ↓のコードをコピー&ペーストしてみてください。 Private Sub CommandButton1_Click() Dim i As Long, c As Range, wS1 As Worksheet Set wS1 = Worksheets("Sheet1") If Range("A1") <> "" Then Set c = wS1.Range("A:A").Find(what:=Range("A1"), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then i = c.Row With Range("A3") .Value = wS1.Cells(i, "B") .Offset(, 1) = wS1.Cells(i, "C") .Offset(, 2) = wS1.Cells(i, "D") End With End If Else MsgBox "検索データが未入力です。", vbOKOnly Range("A1").Select End If End Sub ※ 1行目と最終行はダブルクリックした時点で表示されていますので、 2行目以降から「End Sub」の前の行までをコピー&ペーストします。 こんな感じをご希望だったのでしょうか?m(_ _)m