- ベストアンサー
VBAで斜めの数字を計算させる
excelシートに こんな感じです。 A1 B1 C1 A2 B2 C2 A3 B2 C3 A5 B5 C5 A1,B2,C3に500,000 / 600,000 / 700,000と数字がはいっています。 A5 B5 C5に A1,B2,C3の数字に×1.05した結果を表示させたいのです。 VBAで書くにはどうしたらよいでしょうか? Cells( , )*1.05 Cells( , )←このセルの指定を=ExcelのA1→B2→C3をというように変化させたいのです。 offsetなどを使ってみてもうまくいきません。 よろしくお願い致します。 next
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>For j=1 To i-1 >Cells(i+1,j).value = cells(j,j).value*1.05 >Next j 例えば、ご質問のケースでは3行×3列なのでi=4です。 5行目に結果を表示させたいとのことなので、行の指定をi+1(=5)とし、1列から3列まで入力するためにjを1から3(=i-1)まで回しました。 順を追っていくと、 Cells(5,1)にCells(1,1)×1.05の結果を書く。 Cells(5,2)にCells(2,2)×1.05の結果を書く。 Cells(5,3)にCells(3,3)×1.05の結果を書く。 です。 この記述だと、斜めの入力セル数が3個に限らず、99個まで対応できます。どのような状況で利用されるのか、ご質問では推測できませんでしたので、汎用性が高いほうで記述しました。やっていることはNo.1の回答の方と同じです。
その他の回答 (3)
- bssa
- ベストアンサー率55% (29/52)
上記のケースですと、 For i = 1 To 100 If Cells(i, i).Text = "" Then Exit For Next i と書いて、行数(または列数)をカウントします。この場合はi-1です。 そのあと、 For j=1 To i-1 Cells(i+1,j).value = cells(j,j).value*1.05 Next j でOKです。
- peso
- ベストアンサー率41% (40/97)
こんなかんじではないでしょうか? ココで使っている ConvertFormula はR1C1形式の参照⇔A1形式の参照のように変換してくれます。なので、ここでは通常 Cells(cnt, cnt) になるところをRange("A1")のような形式に変換しています。 Dim cnt As Integer For cnt = 1 To 3 Range(Application.ConvertFormula( _ Formula:="R5C" & cnt, _ fromReferenceStyle:=xlR1C1, _ toReferenceStyle:=xlA1, _ toabsolute:=xlRelative)).Value = Range(Application.ConvertFormula( _ Formula:="R" & cnt & "C" & cnt, _ fromReferenceStyle:=xlR1C1, _ toReferenceStyle:=xlA1, _ toabsolute:=xlRelative)).Value * 1.05 Next cnt
お礼
pesoさんありがとうございます。以前 インプットボックスでの範囲指定で、A1からB3というように 指定したいといった質問をしたのを覚えてくださっていてくれたのでしょうか? 今回は、そんな配慮が感じられる回答と推察いたしました。でもちょっと わたしには難しくてよくわかりませんでした。残念です。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 こんな感じでしょうか。 Dim i As Long For i = 1 To 3 Cells(5, i) = Cells(i, i) * 1.05 Next i では。
お礼
maruru01さん またまた 回答ありがとうございました。 私の 弱い頭でわかる回答でした。 (うう 上の2件についても理解したかったです)
お礼
さっそく EXCELに移してみると ちゃんと結果がでました!!ありがとうございます。 For i = 1 To 100 If Cells(i, i).Text = "" Then Exit For Next i これは、A1 B2と 空欄になるまでセルを移動しなさいという意味ですよね? For j=1 To i-1 Cells(i+1,j).value = cells(j,j).value*1.05 Next j これは、、あまり意味がわかりませんでした。でも ちゃんと結果がでますし、、 たとえば、 iが1の時は、jは 1から0までと言う意味ですか? cells(2,1)にcells(1,1)に1.05をかけた結果を表示せよという意味ですか?