以下のようなExcelから各商品分類の区分名の中の売上額、利益額、数量のみをFor文よりも時間がかからず取り出すことは可能ですか?
今のやり方は一回目のfor文で(名前1)~(名前n)までを回し、二回目のfor文で行を回し、区分名が売上額、利益額、数量のどれかであれば別のシート(『まとめ』という名前です)に書き込むというようにしています。
しかし、このやり方では重いらしくたまに落ちてしまいます。
もし、もっと簡単もしくは重くないやり方などあればご教授いただければ幸いです。
*人の数や名前は変化するため、1~nにしてあります。始まりは変わらずN列からなのですが、終わりは増えたり減ったりする可能性もあります
一応自身の目的など分かりやすく書いたつもりではありますが、もしわかりにくかったら申し訳ございません。
[作成元のExcelシート]
|L|M|N|...|S|X|
|:--|:--:|:--:|:--:|
|分類名|区分名|(名前1)|...|(名前n)|計|
|(分類1)|売り上げ額|
| |利益額|
| |利益率|
| |数量|
| |平均原価|
|(分類2)|売り上げ額|
| |利益額|
| |利益率|
| |数量|
| |平均原価|
VBA
1Sub 作成 2Dim i As Integer 3Dim j As Integer 4Dim saigo As Integer '人の最終列 5Dim num As Integer 6 7'人の名前がどこからどこまでかを確認 8For i = 14 To Sheets(1).Cells(6,Columns.count).End(xlToLeft).Column 9 If Sheets(1).Cells(6,i) = "計" Then 10 saigo = i-1 11 End If 12Next 13 14'まとめシートに値を入れる 15For i = 14 TO saigo 16 For j = 1 To Sheets(1).Cells(Rows.count,i).End(xlUp).Row 17 'エラーもしくは空白の場合セルに0を入れる 18 If Sheets(1).Cells(j,i) = "" Or IsError(Sheets(1.Cells(j,i)) Then 19 Sheets(1).Cells(j,i) = 0 20 EndIf 21 22 If Sheets("まとめ").Cells(1,1) = "" Then 23 Sheets("まとめ").Cells(1,1) = Sheets(1).Cells(12,i) 24 Sheets("まとめ").Cells(1,2) = Sheets(1).Cells(13,i) 25 Sheets("まとめ").Cells(1,3) = Sheets(1).Cells(12,i) 26 Else 27 num = Sheets("まとめ").Cells(Rows.count,1).End(xlUp).Row + 1 28 Sheets("まとめ").Cells(num,1) = Sheets(1).Cells(j,i) 29 Sheets("まとめ").Cells(num,2) = Sheets(1).Cells(j,i) 30 Sheets("まとめ").Cells(num,3) = Sheets(1).Cells(j,i) 31 End If 32 Next 33Next 34Next 35End Sub
[最終的に出来て欲しい内容(まとめシート)]
A | B | C |
---|---|---|
(分類1) | (名前1) | 売上額 |
(分類1) | (名前1) | 利益額 |
(分類1) | (名前1) | 数量 |
(分類2) | (名前1) | 売上額 |
(分類2) | (名前1) | 利益額 |
(分類2) | (名前1) | 数量 |
. | (名前1) | 数量 |
. | (名前1) | 数量 |
. | (名前1) | 数量 |
(分類1) | (名前n) | 売上額 |
(分類1) | (名前n) | 利益額 |
(分類1) | (名前n) | 数量 |
(分類2) | (名前n) | 売上額 |
(分類2) | (名前n) | 利益額 |
(分類2) | (名前n) | 数量 |
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。