プロが教える店舗&オフィスのセキュリティ対策術

シートは2つありまして、DBと仕入表

DBシートは、A列はNo.、B列は仕入先...
仕入表シートは、C列No.、 D列仕入先...で11行目から入力
(2つの項目だけあげましたが、他にもありまして、DBシートと仕入表の項目の並びは同じではないです。)

DBシートのデータ量は決まってなくて、入力されているところまでを仕入表に反映させたいです。
数式ではなくボタンをクリックすると自動転記されるようにしたいです。

ご教授いただきます様よろしくお願いします。

質問者からの補足コメント

  • つらい・・・

    すみせん…。
    色々調べて考えましたが、うまくいきません。。。

    答えを教えていただけましたら幸いです。
    何卒よろしくお願いいたします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2017/05/27 09:01
  • うーん・・・

    Sub DBから仕入表へ読込み()

    Dim i As Long
    Dim j As Long
    Dim RowCount As Long
    Dim ColCount As Long
    Dim MyData() As Variant

    Dim wsDB As Worksheet
    Dim ws仕入表 As Worksheet

    Set wsDB = ThisWorkbook.Worksheets("DB")
    Set ws仕入表 = ThisWorkbook.Worksheets("仕入表")

    RowCount = wsDB.Cells(wsDB.Rows.Count, 1).End(xlUp).Row - 1

    ColCount = wsDB.Cells(1, wsDB.Columns.Count).End(xlToLeft).Column - 1

    No.3の回答に寄せられた補足コメントです。 補足日時:2017/05/27 15:02
  • うーん・・・

    先ほどの続きです。
    ReDim MyData(1 To RowCount, 1 To ColCount)

    For i = 1 To RowCount
    For j = 1 To ColCount

    MyData(i, j) = wsDB.Cells(i + 1, j).Value '表DBの全てのデータを格納
    Next j
    Next i

    For i = 1 To RowCount
    ws仕入表.Cells(10 + i, 3).Value = MyData(i, 3) 'ここは適当に座標を修正してください。
    ws仕入表.Cells(10 + i, 25).Value = MyData(i, 23)
    ws仕入表.Cells(10 + i, 21).Value = MyData(i, 24)

    いくつか座標は削除しました。文字数の関係で・・・。

    Next i

    End Sub

    No.4の回答に寄せられた補足コメントです。 補足日時:2017/05/27 15:03

A 回答 (4件)

僕の計算違いかな??


こちらで実行できないんで、確証はないんですが。
RowCountと、ColCountの代入部分の - 1 を消してみてください。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ダメでした・・・。
模索してみます。
色々と教えてくださりありがとうございました。

お礼日時:2017/05/31 20:22

元の表が分からないので、まだ不完全です。


コメントした箇所全体の座標を修正してください。

Sub DBから仕入表へ読込み()

Dim i As Long
Dim j As Long
Dim RowCount As Long
Dim ColCount As Long
Dim MyData() As Variant

Dim wsDB As Worksheet
Dim ws仕入表 As Worksheet

Set wsDB = ThisWorkbook.Worksheets("DB")
Set ws仕入表 = ThisWorkbook.Worksheets("仕入表")

RowCount = wsDB.Cells(wsDB.Rows.Count, 1).End(xlUp).Row - 1
ColCount = wsDB.Cells(1, wsDB.Columns.Count).End(xlToLeft).Column - 1

ReDim MyData(1 To RowCount, 1 To ColCount)

For i = 1 To RowCount
For j = 1 To ColCount
MyData(i, j) = wsDB.Cells(i + 1, j + 1).Value '表DBの全てのデータを格納
Next j
Next i

For i = 1 To RowCount
ws仕入表.Cells(10 + i, 3).Value = MyData(i, 1) 'ここは適当に座標を修正してください。
ws仕入表.Cells(10 + i, 4).Value = MyData(i, 2)
ws仕入表.Cells(10 + i, 6).Value = MyData(i, 3)
ws仕入表.Cells(10 + i, 8).Value = MyData(i, 4)
ws仕入表.Cells(10 + i, 9).Value = MyData(i, 5)
ws仕入表.Cells(10 + i, 10).Value = MyData(i, 6)
Next i

End Sub

僕の力になれるのはここまでになります・・・。ごめんなさい。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございます。感謝感激です。
早速少し修正しながら試してみたところ、最後のws仕入表.Cells(10 + i, 21).Value = MyData(i, 24)のところでインデックスが有効範囲にありません。とエラーがでます。
DBシートは24列目が最終列で、1行目は項目が空白なく並んでいます。
仕入表の11行21列目に転記したいのですが・・・。この行を削除するとちゃんとほかのところは自動転記されます。原因がわからなくて・・・。
教えてくださいませ。

お礼日時:2017/05/27 14:57

wsDBから、いちいちws仕入に移動するのではなく、


配列を用いてデータを一気に格納した方が、多少は早いかもしれませんね。
配列はご存知ですか??

Dim myData(1 To 100, 1 To 100) As Variant

と宣言し、配列の添え字をx軸、y軸と考えてデータを格納してみてください。
データを拾うループと、データを落とすループは、それぞれ別のループにします。

入力: myData(i,j) = ws仕入表.Cells(i, j).Value
これをFor文でまわしきって、

これを次のFor文でまわす
出力: ws仕入表.Cells(i, j).Value = myData(i,j)

というような。
雑な説明ですみません。
この回答への補足あり
    • good
    • 0
この回答へのお礼

早速ありがとうございます。
パッとプログラムを作成することができないので、調べて考えてみます。
ありがとうございました。

お礼日時:2017/05/25 14:44

大雑把な流れは、



1. DBの各項目を格納する配列を用意する。
2. DBのデータ数(=最終行)を求めて、変数に格納する。
3. For i = 2 To 最終行で、レコードの各値を、配列に格納。
4. 仕入表に切り替えて、For i = 2 To 最終行で、配列の値をセルに転記。

VBAの基本ができれば、難しいことはないと思いますが、
強いて言えば、最終行の求め方でしょうか??
日本語の部分を適当に直して利用してください。

LastRow = ワークシート.Cells(ワークシート.Rows.Count, 列).End(xlUp).Row
    • good
    • 0
この回答へのお礼

ありがとうございます。
上記の内容を参考に、考えて作ってみたのですが転記処理にすごく時間がかかっています。
下記の内容で修正した方がいいところがありましたら教えてくださいませ。

Sub DBから仕入表へ読込み()

Dim i As Long, j As Long

Dim wsDB As Worksheet
Dim ws仕入表 As Worksheet

Set wsDB = ThisWorkbook.Worksheets("DB")
Set ws仕入表 = ThisWorkbook.Worksheets("仕入表")

Dim rowsData As Long

LastRow = wsDB.Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 To LastRow - 1

ws仕入表.Cells(10 + i, 3).Value = wsDB.Cells(1 + i, 3).Value
ws仕入表.Cells(10 + i, 4).Value = wsDB.Cells(1 + i, 4).Value
ws仕入表.Cells(10 + i, 6).Value = wsDB.Cells(1 + i, 7).Value
ws仕入表.Cells(10 + i, 8).Value = wsDB.Cells(1 + i, 8).Value
ws仕入表.Cells(10 + i, 9).Value = wsDB.Cells(1 + i, 11).Value
ws仕入表.Cells(10 + i, 10).Value = wsDB.Cells(1 + i, 12).Value
ws仕入表.Cells(10 + i, 11).Value = wsDB.Cells(1 + i, 13).Value
ws仕入表.Cells(10 + i, 12).Value = wsDB.Cells(1 + i, 21).Value
ws仕入表.Cells(10 + i, 13).Value = wsDB.Cells(1 + i, 14).Value
ws仕入表.Cells(10 + i, 14).Value = wsDB.Cells(1 + i, 15).Value

′↑後10行ぐらい続きます。

Next i

End Sub

お礼日時:2017/05/25 13:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!