プロが教えるわが家の防犯対策術!

マクロ初心者です。

名前,走行距離,使用燃料,燃費
Aさん,2500,120,
Bさん,3100,150,
Cさん,4200,190,


上記のようなシートがあり、燃費の列は空欄となっています。
その中で、走行距離と使用燃料から燃費を算出するマクロを作ろうと思います。
しかし、運転手の人数は解析ごとに異なるので、人数をカウントして、その分だけ繰り返し計算をおこなう必要があります。
また、これらを縦棒グラフで表現させたいと考えております。

まとめると、以下の命令になるのかな?
(1)運転手人数を数える
(2)燃費計算の繰り返す(人数分)
(3)アクティブセル内のデータを抽出し、グラフを作成(燃費)

これらの処理をおこなうためには、どうマクロを作成すればよいのでしょうか?
ご意見いただけると幸いです。

以上、よろしくお願いします。

A 回答 (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データで作ると
桁が違いすぎて、違いが見えないのですが、どう考えるべきですか。
    • good
    • 0

#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
    • good
    • 0

名前がA1だとしたら


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

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

お礼日時:2005/12/06 13:01

失礼ですが、マクロの作成依頼ですか?


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

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

お礼日時:2005/12/06 12:58

(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 '運転手の人数
    • good
    • 0
この回答へのお礼

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

難しくはなかったようです…
アクティブセルの選択がわからず、つまずいていました。
ありがとうございます。

お礼日時:2005/12/06 12:54

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