Sub 作成()
Const KURIKOSIKIN_COL As Long = 4 '「転記先」シート「繰越税抜金額列」
Const KENSAKU_CLM As Long = 2 '「転記先」シートB列
Const KENSAKU_ROW As Long = 4 '「転記先」シート4行目
Dim Sh_Tenki As Worksheet '「転記先」シート
Dim Data_Hanni As Range 'index関数のデータ範囲
Dim Kensaku_Hanni1 As Range 'match関数の検索する範囲①
Dim Kensaku_Hanni2 As Range 'match関数の検索する範囲②
Set Data_Hanni = Worksheets("元表").Range(Cells(7, 4), Cells(20, 8)) 'index関数のデータ範囲($D$7:$H$20)
Set Sh_Tenki = Worksheets("転記先")
Set Kensaku_Hanni1 = Worksheets("元表").Range(Cells(7, 3), Cells(20, 3)) '検索する範囲①($C$7:$C$20)
Set Kensaku_Hanni2 = Worksheets("元表").Range(Cells(6, 4), Cells(6, 8)) '検索する範囲②($D$6:$H$6)
Worksheets("転記先").Cells(5, 4).Value = WorksheetFunction.Index(Data_Hanni, _
WorksheetFunction.Match(Sh_Tenki.Cells(5, KENSAKU_CLM), Kensaku_Hanni1, 0), _
WorksheetFunction.Match(Sh_Tenki.Cells(KENSAKU_ROW, 4), Kensaku_Hanni2, 0))
End Sub
Dim iRow As Integer
Dim iCol As Integer
For iRow = 5 To 91
For iCol = 4 To 8
Sh_Tenki.Cells(iRow, iCol).Value = WorksheetFunction.Index(Data_Hanni, _
WorksheetFunction.Match(Sh_Tenki.Cells(iRow, KENSAKU_CLM), Kensaku_Hanni1, 0), _
WorksheetFunction.Match(Sh_Tenki.Cells(KENSAKU_ROW, iCol), Kensaku_Hanni2, 0))
Next
Next
'エラーが発生しても無視して処理を継続(乱暴ですが。)
On Error Resume Next
Dim iRow As Integer
Dim iCol As Integer
For iRow = 5 To 91
For iCol = 4 To 8
Sh_Tenki.Cells(iRow, iCol).Value = WorksheetFunction.Index(Data_Hanni, _
WorksheetFunction.Match(Sh_Tenki.Cells(iRow, KENSAKU_CLM), Kensaku_Hanni1, 0), _
WorksheetFunction.Match(Sh_Tenki.Cells(KENSAKU_ROW, iCol), Kensaku_Hanni2, 0))
Next
Next
Sub 作成2()
Const KENSAKU_CLM As Long = 2 '「転記先」シートB列
Const KENSAKU_ROW As Long = 4 '「転記先」シート4行目
Const MOTO_KEY_CLM As Long = 3 '「元表」シートのキー列(社名列:C列)
Const MOTO_KEY_ROW As Long = 7 '「元表」シートのキー行(項目見出し行:7行目)
Dim Sh_Moto As Worksheet '「元表」シート
Dim Sh_Tenki As Worksheet '「転記先」シート
'Dictionaryオブジェクトの宣言
Dim dicShamei As Object '元表の社名行番号ディクショナリ
Dim dicKomoku As Object '元表の項目名列番号ディクショナリ
Dim iRRow As Integer '元表シートの読込行
Dim iRCol As Integer '元表シートの読込列
Dim iWRow As Integer '転記先シートの出力行
Dim iWCol As Integer '転記先シートの出力列
Set Sh_Moto = Worksheets("元表")
Set Sh_Tenki = Worksheets("転記先")
Set dicShamei = CreateObject("Scripting.Dictionary")
Set dicKomoku = CreateObject("Scripting.Dictionary")
'【ディクショナリ作成】
'元表シートから社名のディクショナリを作成
For iRRow = 8 To Sh_Moto.Cells(8, MOTO_KEY_CLM).End(xlDown).Row
'社名をキーとして行番号をディクショナリに保管(同じ社名が複数存在した場合、後勝ちで行番号が上書きされます)
dicShamei(Sh_Moto.Cells(iRRow, "C").Value) = iRRow
Next
'元表シートから項目名のディクショナリを作成
For iRCol = 4 To Sh_Moto.Cells(MOTO_KEY_ROW, 4).End(xlToRight).Column
'項目名をキーとして列番号をディクショナリに保管
dicKomoku(Sh_Moto.Cells(7, iRCol).Value) = iRCol
Next
'【転記処理】
'転記先シートの社名ループ
For iWRow = 5 To Sh_Tenki.Cells(5, KENSAKU_CLM).End(xlDown).Row
'社名から元表の行番号を取得
If dicShamei.Item(Sh_Tenki.Cells(iWRow, KENSAKU_CLM).Value) = "" Then
'社名から行番号が取得できない場合は何もしない
Else
'元表の行番号を取得
iRRow = dicShamei.Item(Sh_Tenki.Cells(iWRow, KENSAKU_CLM).Value)
'転記先シートの項目ループ
For iWCol = 4 To Sh_Moto.Cells(KENSAKU_ROW, 4).End(xlToRight).Column
'項目名から元表の列番号を取得
If dicKomoku.Item(Sh_Tenki.Cells(KENSAKU_ROW, iWCol).Value) = "" Then
'項目名から列番号が取得できない場合は何もしない
Else
'元表の列番号を取得
iRCol = dicKomoku.Item(Sh_Tenki.Cells(KENSAKU_ROW, iWCol).Value)
'「元表」シートの取得行・取得列のセルの値を、「転記先」シートの出力行・出力列に出力する
Sh_Tenki.Cells(iWRow, iWCol).Value = Sh_Moto.Cells(iRRow, iRCol).Value
End If
Next iWCol
End If
Next iWRow
End Sub
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/04 06:00
2017/12/05 06:40
2017/12/05 09:22
2017/12/06 07:13