【Excel VBA入門】まとめ|入力表から一覧表へのデータ転送

記述編

入力表から一覧表へのデータ転送の方法をご紹介します。
表形式のデータベースに直接データ入力をするのではなく、「入力表」を活用することによって「入力場所のまちがい防止」や、「エクセル操作の効率化」を実現できるかもしれません。
とくに、いろいろな場所に散らばったセルにデータ入力するときのミス防止策としては効果を発揮します。

こちらでご紹介するおもな内容です。

  • 最終行の値を取得する方法
  • 指定セルの値を代入する方法
  • セルの値を消去する方法
スポンサーリンク

データの転記|マクロの作成例

さきにマクロの作成例をご紹介します。

シート「入力」の範囲「セルB1」から「セルB3」に値を入力してからマクロ実行をします。

マクロ実行をすると、シート「入力」の値がシート「一覧」に転記されます。

こちらの例ではシンプルな構成のためマクロの効果を実感しにくいですが、コードを転用すれば複雑なデータにも活用ができます。

データの転記|コードの記述例

こちらが今回ご説明するコードの内容です。

Sub test()
    Dim lastrow As Long
        lastrow = Worksheets("一覧").Cells(Rows.Count, 1).End(xlUp).Row

    'ワークシート「一覧」に行番号を入力
    If Worksheets("一覧").Cells(lastrow, 1).Value = "番号" Then
        Worksheets("一覧").Cells(lastrow + 1, 1) = 1
    Else
        Worksheets("一覧").Cells(lastrow + 1, 1).Value = Worksheets("一覧").Cells(lastrow, 1).Value + 1
    End If

    '入力データをワークシート「一覧」に代入
    Worksheets("一覧").Cells(lastrow + 1, 2) = Worksheets("入力").Cells(1, 2)
    Worksheets("一覧").Cells(lastrow + 1, 3) = Worksheets("入力").Cells(2, 2)
    Worksheets("一覧").Cells(lastrow + 1, 4) = Worksheets("入力").Cells(3, 2)

    '代入後データの値をクリア
    Worksheets("入力").Range(Cells(1, 2), Cells(3, 2)).ClearContents

    'ワークシート「入力」の「セルB1」を選択
    Worksheets("入力").Cells(1, 2).Select
End Sub

ぱっと見た感じでコードが長くてむずかしそうに見えますが、内容はシンプルですのでひとつずつ確認をしていきましょう。

データの転記|それぞれのコード構成

それでは先ほどご紹介した例のコードの内容を確認していきましょう。

最終行の取得|2~3行目

コードの内容はこちらです。

    Dim lastrow As Long
        lastrow = Worksheets("一覧").Cells(Rows.Count, 1).End(xlUp).Row

ワークシート「一覧」のセルA列の最下行を取得しています。
いったんA列のもっとも下のセルを指定してから「上方向に移動」することによって、列の途中に空白セルがあっても最下行に影響をうけない方法をとっています。

この方法は何かと利用できる場面が多いため、ぜひとも覚えておいてください。

ワークシート「一覧」に行番号を入力|6~10行

コードで記述したい内容はこちらです。

  • もし最下行の値が「番号」であった場合、A列の最下行に「1」を代入する
  • そうでなければ、A列の最下行はひとつ上の値に「1」を加算した値にする

こちらに該当するコードがこちらです。

   'ワークシート「一覧」に行番号を入力
    If Worksheets("一覧").Cells(lastrow, 1).Value = "番号" Then
        Worksheets("一覧").Cells(lastrow + 1, 1) = 1
    Else
        Worksheets("一覧").Cells(lastrow + 1, 1).Value = Worksheets("一覧").Cells(lastrow, 1).Value + 1
    End If

データ転送の2回目からは、A列の「番号」が連番になっていることが確認できます。

入力データをワークシート「一覧」に代入|13~15行目

それぞれのデータを該当する場所に代入をしています。
ここでは、データの転送先のセル引数に「lastrow + 1」と記述することによって、最終行のひとつしたの空白セルを指定しています。

    '入力データをワークシート「一覧」に代入
    Worksheets("一覧").Cells(lastrow + 1, 2) = Worksheets("入力").Cells(1, 2)
    Worksheets("一覧").Cells(lastrow + 1, 3) = Worksheets("入力").Cells(2, 2)
    Worksheets("一覧").Cells(lastrow + 1, 4) = Worksheets("入力").Cells(3, 2)

代入後データの値をクリア|18行目

データの転送がおわったら、ワークシート「入力」のデータを消去しています。
2回目から新しいデータを入力するときに値が入った状態だとミスの原因になるためです。

    '代入後データの値をクリア
    Worksheets("入力").Range(Cells(1, 2), Cells(3, 2)).ClearContents

ワークシート「入力」の「セルB1」を選択|21行目

さいごに「セルB1」を選択しています。
こちらは、さきほどのデータの消去のときとおなじ理由です。
2回目から新しいデータを入力するときに、いちいち手作業でセルを選択していてはミスが発生するかもしれないからです。

    'ワークシート「入力」の「セルB1」を選択
    Worksheets("入力").Cells(1, 2).Select

こちらが転記後のセルの状態です。
つぎのデータを入力するときのために「セルB1」の選択もマクロに含めてあることが確認できます。

まとめ

コードのボリューム感こそありますが、かんたんなマクロ組み合わせてつくった例をご紹介しました。

作成例ではあえてシンプルな構造にしてありますが、実際の業務ではもっと複雑なかたちのデータを扱うと思います。
もし使えそうな内容でしたら状況にあわせて転用してみてください。