質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

解決済

VBA 行を絞り込み、列を検索をして転記するコードについて教えて下さい。

chuzenji_c
chuzenji_c

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

2回答

0評価

1クリップ

18閲覧

投稿2021/07/11 02:27

前提・実現したいこと

EXCEL VBA 超初心者です。
SHEET1のD列の数値をSHEET2の行列が合致するセルに転記するエクセル表を作っています。
SHEET2の行は日付と時間、列は地点です。

オートフィルタで行を絞ろうと思ったのですが、行を指定するコードで躓いています。

エラーメッセージは以下です。
実行時エラー'1004'
'Range’メソッドは失敗しました。'Worksheetオブジェクト'

列の指定もこれでいいのか不安です。
ご指導のほど、よろしくお願いいたします。

該当のソースコード

Sub Tenki()
Const MOTO_KEY_ROW As Long = 1 '「Sheet1」シートのキー行(項目見出し行:1行目)
Const KENSAKU_ROW As Long = 1 '「Sheet2」1行目

Dim Sh_Moto As Worksheet '「Sheet1」シート Dim Sh_Tenki As Worksheet '「Sheet2」シート 'Dictionaryオブジェクトの宣言 Dim dicKomoku As Object 'Sheet1の項目名列番号ディクショナリ Dim iRRow As Integer 'Sheet1シートの読込行 Dim iRCol As Integer 'Sheet1シートの読込列 iRCol = 4 Dim iWRow As Integer 'Sheet2シートの出力行 Dim iWCol As Integer 'Sheet2シートの出力列 Set Sh_Moto = Worksheets("Sheet1") Set Sh_Tenki = Worksheets("Sheet2") Set dicKomoku = CreateObject("Scripting.Dictionary") '【ディクショナリ作成】 'Sheet1シートから項目名のディクショナリを作成 For iRCol = 3 To Sh_Moto.Cells(MOTO_KEY_ROW, 3).End(xlToRight).Column '項目名をキーとして列番号をディクショナリに保管 dicKomoku(Sh_Moto.Cells(1, iRCol).Value) = iRCol Next iRCol '【転記処理】 'Sheet2シートの社名ループ Dim MaxRow As Long MaxRow = Sh_Moto.Cells(Rows.Count, 1).End(xlUp).Row For iRRow = 2 To MaxRow 'ws2の行をフィルタリング Sh_Tenki.Select Range("A1").Select Selection.AutoFilter Selection.Range("A1").AutoFilter Field:=1, Operator:=xlFilterValues, Criteria2:=Sh_Moto.Range(iRRow, 1).Value2 'ここでストップします。 Selection.Range("A1").AutoFilter Field:=2, Criteria1:=Sh_Moto.Range(iRRow, 2).Value 'フィルタされた行の行番号を取得 iWRow = ActiveSheet.Row 'Sheet2シートの項目ループ For iWCol = 4 To Sh_Moto.Cells(KENSAKU_ROW, 4).End(xlToRight).Column '項目名からSheet1の列番号を取得 If dicKomoku.Item(Sh_Tenki.Cells(KENSAKU_ROW, iWCol).Value) = "" Then '項目名から列番号が取得できない場合は何もしない Else 'Sheet1の列番号を取得 iRCol = dicKomoku.Item(Sh_Tenki.Cells(KENSAKU_ROW, iWCol).Value) '「Sheet1」シートの取得行・取得列のセルの値を、「Sheet2」シートの出力行・出力列に出力する Sh_Tenki.Cells(iWRow, iWCol).Value = Sh_Moto.Cells(iRRow, iRCol).Value End If Next iWCol Selection.Range("A1").AutoFilter Next iRRow

End Sub

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

Sheet1
Sheet2

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。