• 締切済み

データのある行をカウント方法について(VBA)

マクロ初心者です。 名前,走行距離,使用燃料,燃費 Aさん,2500,120, Bさん,3100,150, Cさん,4200,190, … 上記のようなシートがあり、燃費の列は空欄となっています。 その中で、走行距離と使用燃料から燃費を算出するマクロを作ろうと思います。 しかし、運転手の人数は解析ごとに異なるので、人数をカウントして、その分だけ繰り返し計算をおこなう必要があります。 また、これらを縦棒グラフで表現させたいと考えております。 まとめると、以下の命令になるのかな? (1)運転手人数を数える (2)燃費計算の繰り返す(人数分) (3)アクティブセル内のデータを抽出し、グラフを作成(燃費) これらの処理をおこなうためには、どうマクロを作成すればよいのでしょうか? ご意見いただけると幸いです。 以上、よろしくお願いします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

Sub test01() d = Range("A65536").End(xlUp).Row MsgBox d For i = 2 To d Cells(i, "D") = Cells(i, "B") * Cells(i, "C") Next i End Sub これで済むようだが、どこか違いますか。 >運転手の人数は解析ごとに異なるので の意味がわかりません。間に空白行があるのですか。 >縦棒グラフで表現させたいと どの系列のデータでグラフを作るのですか。3データで作ると 桁が違いすぎて、違いが見えないのですが、どう考えるべきですか。

noname#123709
noname#123709
回答No.4

#2です。 参考までに下記のようなものをどうぞ。 このコードでは運転手の人数は別として、運転手の欄に名前のある行のみ に燃費計算式を入れるものです。 Sub 燃費計算() Dim i As Long For i = 2 To Range("A65536").End(xlUp).Row If Cells(i, 1).Value <> "" Then Cells(i, 4).Value = "=round(B" & i & "/C" & i & ",1)" Cells(i, 4).NumberFormatLocal = "0.0""km/l""" End If Next i End Sub

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

名前がA1だとしたら 燃費 D2=B2/C2 右下角ダブルクリック で表の作成ができます。 走行距離や、使用燃料が変化することを考えると、マクロで計算するより式でやった方がいいと思います。 グラフは、 Aさん以下の範囲と 対応する燃費の部分をCTRLで範囲してしてやってからグラフを作成すればいいです。

keisuke430
質問者

お礼

マクロで作業した方が今後の手間が省けるかと思ったのですが… Nが少ない場合は、直接操作するほうがいいですよねw 丁寧な説明ありがとうございます。

noname#123709
noname#123709
回答No.2

失礼ですが、マクロの作成依頼ですか? 回答者の方から回答をもらってそのまま使用するのはいかがなものかと。 質問者様の為にもなりません。マクロ初心者とのことですが、それならば 勉強して、「ここまでできたけど」とある程度コードを掲示して頂いてから 不明な点をご質問された方がいいですよ。

keisuke430
質問者

お礼

ご指摘ありがとうございます。 初めは、CurrentRegionでアクティブセルを選択してできるものかと思ったのですが… 手も足もでませんでした。 でも、書込みをしながらマクロの値を定義をすればいいのかな? という気づきを得ることができました。 感謝します。

  • s___o
  • ベストアンサー率35% (108/306)
回答No.1

(1)、(2)について、表が以下のようにある場合 さらに、前提条件として、運転手の名前が途中で 行で途切れることはない(4列目は空白で5列目移行に 名前が記入されていることはない)とします。 |A, B, C, D ------------------------------- 1|名前,走行距離,使用燃料,燃費 2|Aさん,2500,120, 3|Bさん,3100,150, 4|Cさん,4200,190, 5|… row = 2 Do While Cells(row, 1) <> "" Cells(row, 4) = Cells(row, 2) / Cells(row, 3) '↑燃費計算 row = row + 1 Loop cnt = row - 2 '運転手の人数

keisuke430
質問者

お礼

A,B,C,Dをそれぞれ名前、走行距離、使用燃料、燃費と定義して、以下の様につくりました。 Dim nDriver As Integer ' ドライバの人数 Dim count As Integer Dim ドライバ As Range Dim 燃費 As Range Dim tmp As Range Dim シート名 As String ' ドライバ名のカウント nDriver = Range("A65536").End(xlUp).Row ' A列で入力がある行数をカウントしている。 シート名 = ActiveSheet.Name ' 燃費の計算 For count = 2 To nDriver Step 1 ActiveSheet.Cells(count, 燃費列).Value = _ ActiveSheet.Cells(count, 走行距離列).Value / ActiveSheet.Cells(count, 消費燃料列).Value Next ' グラフ化 Set ドライバ = Range(Cells(2, ドライバ名列), Cells(nDriver, ドライバ名列)) Set 燃費 = Range(Cells(2, 燃費列), Cells(nDriver, 燃費列)) Set tmp = Union(ドライバ, 燃費) Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=tmp, _ PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:=シート名 ActiveChart.HasDataTable = False ActiveChart.Axes(xlValue).Select 難しくはなかったようです… アクティブセルの選択がわからず、つまずいていました。 ありがとうございます。