No.3
- 回答日時:
元の表が分からないので、まだ不完全です。
コメントした箇所全体の座標を修正してください。
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
僕の力になれるのはここまでになります・・・。ごめんなさい。
ありがとうございます。感謝感激です。
早速少し修正しながら試してみたところ、最後のws仕入表.Cells(10 + i, 21).Value = MyData(i, 24)のところでインデックスが有効範囲にありません。とエラーがでます。
DBシートは24列目が最終列で、1行目は項目が空白なく並んでいます。
仕入表の11行21列目に転記したいのですが・・・。この行を削除するとちゃんとほかのところは自動転記されます。原因がわからなくて・・・。
教えてくださいませ。
No.2
- 回答日時:
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)
というような。
雑な説明ですみません。
No.1
- 回答日時:
大雑把な流れは、
1. DBの各項目を格納する配列を用意する。
2. DBのデータ数(=最終行)を求めて、変数に格納する。
3. For i = 2 To 最終行で、レコードの各値を、配列に格納。
4. 仕入表に切り替えて、For i = 2 To 最終行で、配列の値をセルに転記。
VBAの基本ができれば、難しいことはないと思いますが、
強いて言えば、最終行の求め方でしょうか??
日本語の部分を適当に直して利用してください。
LastRow = ワークシート.Cells(ワークシート.Rows.Count, 列).End(xlUp).Row
ありがとうございます。
上記の内容を参考に、考えて作ってみたのですが転記処理にすごく時間がかかっています。
下記の内容で修正した方がいいところがありましたら教えてくださいませ。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Visual Basic(VBA) 【VBA】データを入力後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。 3 2022/11/16 01:37
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
- Excel(エクセル) 【エクセル」 特定のセルで条件抽出した列を、別シートに上から詰めて表示したい。 8 2022/04/08 16:00
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
- Visual Basic(VBA) 【VBA】指定した検索条件に一致したら別シートに転記したい 2 2022/03/23 16:14
- Excel(エクセル) 単価シートから単価をエクセル関数で自動取得する方法 1 2023/07/02 22:00
- Excel(エクセル) VBAで、シート間の転記するコードを教えてください。 4 2023/03/26 10:43
- Excel(エクセル) Excel 計算式を教えて下さい 3 2022/12/15 19:46
- Excel(エクセル) excelにおける転記マクロの書き方 2 2023/05/12 03:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelのINDEXとMATCH関数でスピ...
-
エクセルで、絶対値の平均を算...
-
表にフィルターをかけ、絞った...
-
array関数で格納した配列の型を...
-
Excelのセルの色指定をVBAから...
-
エクセルでエラーを無視して一...
-
Datatableへの代入
-
配列がとびとびである場合の書き方
-
VBAで指定期間の範囲を抽出し、...
-
DataSetから、DataTableを取得...
-
Excelのオートフィルタで抽出し...
-
VBA 配列に格納した値の平均の...
-
読み込みで一行おきに配列に格納
-
VBA listBoxについて
-
[エクセル]連続する指定範囲か...
-
Split関数でLong配列に格納する...
-
C#でFontStyleの列挙体に値を追...
-
EXCEL VBA 2次元配列に格納さ...
-
INDEX(D:D,L3)の意味は?
-
エクセルのMEDIAN(中央値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
ExcelのINDEXとMATCH関数でスピ...
-
array関数で格納した配列の型を...
-
[エクセル]連続する指定範囲か...
-
表にフィルターをかけ、絞った...
-
VBA listBoxについて
-
エクセルで、絶対値の平均を算...
-
配列がとびとびである場合の書き方
-
DataSetから、DataTableを取得...
-
[VBA]改行入りのセルの値を配列...
-
VBA 配列に格納した値の平均の...
-
配列のSession格納、及び取得方...
-
【VBA】ユーザーフォーム リス...
-
エクセルでエラーを無視して一...
-
SUMPRODUCT関数を用いた最小値
-
Excel VBA 配列の分割について
-
Excelのオートフィルタで抽出し...
-
VB6.0 ファイルの一括読込み
-
Excel オートフィルタのリスト...
-
VBAで指定期間の範囲を抽出し、...
おすすめ情報
すみせん…。
色々調べて考えましたが、うまくいきません。。。
答えを教えていただけましたら幸いです。
何卒よろしくお願いいたします。
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).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