OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

VBAで斜めの数字を計算させる

  • すぐに回答を!
  • 質問No.176772
  • 閲覧数236
  • ありがとう数3
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 57% (172/297)

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
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.4
レベル9

ベストアンサー率 55% (29/52)

>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の回答の方と同じです。
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル14

ベストアンサー率 51% (1179/2272)

こんにちは。maruru01です。 こんな感じでしょうか。 Dim i As Long For i = 1 To 3   Cells(5, i) = Cells(i, i) * 1.05 Next i では。 ...続きを読む
こんにちは。maruru01です。
こんな感じでしょうか。

Dim i As Long

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

では。
お礼コメント
yokoneco

お礼率 57% (172/297)

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

(うう 上の2件についても理解したかったです)
投稿日時 - 2001-12-08 23:48:13

  • 回答No.2
レベル9

ベストアンサー率 41% (40/97)

こんなかんじではないでしょうか? ココで使っている ConvertFormula はR1C1形式の参照⇔A1形式の参照のように変換してくれます。なので、ここでは通常 Cells(cnt, cnt) になるところをRange("A1")のような形式に変換しています。 Dim cnt As Integer For cnt = 1 To 3 Range(A ...続きを読む
こんなかんじではないでしょうか?
ココで使っている 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
お礼コメント
yokoneco

お礼率 57% (172/297)

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

今回は、そんな配慮が感じられる回答と推察いたしました。でもちょっと わたしには難しくてよくわかりませんでした。残念です。
投稿日時 - 2001-12-08 23:46:21
  • 回答No.3
レベル9

ベストアンサー率 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 ...続きを読む
上記のケースですと、
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です。
お礼コメント
yokoneco

お礼率 57% (172/297)

さっそく 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:29
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ