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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[エクセル]連続する指定範囲か...
-
表にフィルターをかけ、絞った...
-
array関数で格納した配列の型を...
-
配列に画像を格納
-
Excelのセルの色指定をVBAから...
-
DataSetから、DataTableを取得...
-
Split関数でLong配列に格納する...
-
SUMPRODUCT関数を用いた最小値
-
ExcelのINDEXとMATCH関数でスピ...
-
エクセルで、絶対値の平均を算...
-
Excel オートフィルタのリスト...
-
VB6.0 ファイルの一括読込み
-
EXCEL VBA 2次元配列に格納さ...
-
仮想リストコントロールの表示
-
上位3つの和を求めるエクセル...
-
Datatableへの代入
-
VBA listBoxについて
-
VBA 配列に格納した値の平均の...
-
INDEX(D:D,L3)の意味は?
-
Dictionaryを使い4つの条件の一...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
エクセルで、絶対値の平均を算...
-
表にフィルターをかけ、絞った...
-
ExcelのINDEXとMATCH関数でスピ...
-
[エクセル]連続する指定範囲か...
-
array関数で格納した配列の型を...
-
配列がとびとびである場合の書き方
-
VBA 配列に格納した値の平均の...
-
DataSetから、DataTableを取得...
-
[VBA]改行入りのセルの値を配列...
-
読み込みで一行おきに配列に格納
-
Excel オートフィルタのリスト...
-
iniファイルのキーと値を取得す...
-
【VBA】ユーザーフォーム リス...
-
Split関数でLong配列に格納する...
-
配列のSession格納、及び取得方...
-
VB6.0 ファイルの一括読込み
-
Dictionaryを使い4つの条件の一...
-
INDEX(D:D,L3)の意味は?
-
SUMPRODUCT関数を用いた最小値
おすすめ情報
すみせん…。
色々調べて考えましたが、うまくいきません。。。
答えを教えていただけましたら幸いです。
何卒よろしくお願いいたします。
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