プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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の回答の方と同じです。
    • good
    • 0

上記のケースですと、


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です。
    • good
    • 0
この回答へのお礼

さっそく 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をかけた結果を表示せよという意味ですか?

お礼日時:2001/12/08 23:41

こんなかんじではないでしょうか?


ココで使っている 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
    • good
    • 0
この回答へのお礼

pesoさんありがとうございます。以前 インプットボックスでの範囲指定で、A1からB3というように 指定したいといった質問をしたのを覚えてくださっていてくれたのでしょうか?

今回は、そんな配慮が感じられる回答と推察いたしました。でもちょっと わたしには難しくてよくわかりませんでした。残念です。

お礼日時:2001/12/08 23:46

こんにちは。

maruru01です。
こんな感じでしょうか。

Dim i As Long

For i = 1 To 3
  Cells(5, i) = Cells(i, i) * 1.05
Next i

では。
    • good
    • 0
この回答へのお礼

maruru01さん またまた 回答ありがとうございました。
私の 弱い頭でわかる回答でした。

(うう 上の2件についても理解したかったです)

お礼日時:2001/12/08 23:48

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