0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

キーワードをもとに表を転記する

Posted at

VBAで表の内容を転記する

共通するワードをキーとしてシートから別シートに転記するVBAを作成しました.

目次

  1. 事前準備
  2. 部分説明
  3. 完成

1.事前準備

下記のようにExcel上で2つのシートを用意します。
シート1にシート2の内容を転記するようにVBAを書いていきます。

・シート1 (転記を受け取るシート)
IMG-7341.PNG

・シート2(送る側のシート)
IMG-7342.PNG

2.部分説明

ここでは特筆する必要のある個所を説明していきます。

・シートの名前セット
宣言することでこれ以降シート1をSh1として扱います。

Set Sh1 = ThisWorkbook.Worksheets("Sheet1")

・最終行取得
下記のコードでシート内の最終行を取得します。
これをもとにループの終了判定を取ります。

Worksheets("xxxx").Range("xx").End(xlDown).Row 

・転記
シート1の1行目から2行目にシート2の3行目から4行目を転記します。
数値を変えることで範囲を変えることも可能です。

Range(Sh1.Cells(line_count, 1), Sh1.Cells(line_count, 2)).Value =                
          Range(Sh2.Cells(keyword_count, 3), Sh2.Cells(keyword_count, 4)).Value 

3.完成

最終的にはこのようなコードになりました。
変数宣言無駄に多くなってしまったのでもう少しスマートに書けるようになりたいですね。
どなたかの参考になれば幸いです。

Sub ボタン1_Click() 
   '変数の定義 
   Dim i As Integer 
   Dim Sh1 As Worksheet 
   Dim Sh2 As Worksheet 
   Dim count_loop As Long 'While文のカウント 
   Dim keyword_count As Long 'シート2のキーワード行カウント 
   Dim keyword_column As Long 'シート1のキーワード列参照 
   Dim keyword_lastcell As Long 'シート2の最終行参照 
   Dim start As Long 'シート1の開始行 
   Dim end_count As Long 'シート1の最終行 
   Dim line_count As Long 'シート1の参照行 
   count_loop = 1 
   keyword_column = 3 ' シート1の参照列指定 
   keyword_lastcell = Worksheets("Sheet2").Range("B5").End(xlDown).Row + 1 ' シート2の最終行取得 
   Application.ScreenUpdating = False ' 描画を停止する 'ワークシートを指定する 
   Set Sh1 = ThisWorkbook.Worksheets("Sheet1") 
   Set Sh2 = ThisWorkbook.Worksheets("Sheet2") 
   start = (Sh1.Cells(1, 1).End(xlDown).Row) 
   end_count = (Sh1.Cells(1, 3).End(xlDown).Row) + 1 ' シート1の入力側最終行取得 
   line_count = start + 1 
   Do While line_count < end_count 'シート2の開始の行 
     keyword_count = 5 
     Do While keyword_count < keyword_lastcell 'キーワード一致 
       If Sh1.Cells(line_count, keyword_column) Like "*" + Sh2.Cells(keyword_count, 2) + "*" Then 
          Range(Sh1.Cells(line_count, 1), Sh1.Cells(line_count, 2)).Value =                
          Range(Sh2.Cells(keyword_count, 3), Sh2.Cells(keyword_count, 4)).Value 
       End If keyword_count = keyword_count + 1 
     Loop 
     line_count = line_count + 1 
   Loop 
End Sub
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?