
VBA内でワークシート関数を使用する際の、引数の参照について困っています。
満たしたい条件は、
(1)マクロ実行後のシート上においても、セル選択状態で数式「=B1*sum(A1:A3)」
といったように、「値」ではなく、「数式」が入力されているようにしたい。
↑
Application.WorksheetFunction.Sum(・・・は使えない?
(2)上記例のB1およびA1:A3については、マクロ内のユーザ入力によって位置が変わり、C1にもD1にもなり得るので、
cells(1,1)="=B1*sum(A1:A3)"
といった「B1」[A1:A3]的な参照を使いたくない。
イメージとしては、
sub sample()
number = inputbox("数字を入力してください")
cell_a = inputbox("セル1")
cell_b = inputbox("セル2")
yourrange = range(cells(cell_a,1),cells(cell_b,1)
cells(1,1)="=number*sum(yourrange)"・・・※
end sub
みたいなことをしたいのですが、※のようなことを
する方法はありますでしょうか?
説明が下手なもので、補足等あれば随時いたします。
使用環境はWindows2000、Office2000です。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
こんばんは。
その種類のマクロは、練習用のみだと思います。実務レベルにはあまり良くないサンプルだと思います。
ダイアログ型は、よほど、複雑なものでない限りは、これレベルでは、回数は1回ぐらいにします。
なお、Application.Input( ,Type:=8) は、Range型ですから、範囲を選択できます。ただし、以下のコードは変更しなければなりません。
Sub TestSample()
Dim Numver As Variant
Dim cell_a As Range
Dim cell_b As Range
Dim myRange As Range
Dim msg As String
On Error GoTo EndLine
Number = Application.InputBox("数字を入力してください", Type:=2)
'数字以外の入力のエラー処理
If IsNumeric(Number) = False Then
MsgBox "その入力は出来ません。"
Exit Sub
ElseIf Number = "False" Then
Exit Sub
End If
msg = vbCrLf & "をクリックしてください。"
Set cell_a = Application.InputBox("セル1" & msg, Type:=8)
Set cell_b = Application.InputBox("セル2" & msg, Type:=8)
'循環参照のエラー処理
If Not Intersect(Cells(1, 1), Range(cell_a, cell_b)) Is Nothing Then
MsgBox "その範囲選択は出来ません。"
Exit Sub
End If
Set myRange = Range(cell_a.Cells(1), cell_b.Cells(1))
Cells(1, 1).FormulaLocal = "=" & Number & "*SUM(" & myRange.Address(0, 0) & ")"
EndLine:
End Sub
Address(0, 0) は、相対参照。絶対参照は、(0,0) を取り、myRange.Address とします。
FormulaLocal は、Excel Nativeモードで入力値を与える場合は、Formulaのみでも、.Valueプロパティでも良いのです。PCのコントロールパネル側の地域に関わる部分がある時、FormulaLocal プロパティが必要になります。
この回答への補足
早速のご回答ありがとうございました!!
お忙しい中恐れ入ります。
だいたいわかってきたのですが、もしご存知でしたら、
1つのセルをワークシート関数の中で、絶対参照、相対参照する方法を教えていただければと思います。
上記例の中で「Number」が「値」ではなく、
あるセルの数値を参照したいとき、のやり方です。
No.3
- 回答日時:
こんばんは。
Wendy02です。>1つのセルをワークシート関数の中で、絶対参照、相対参照する方法を教えていただければと思います。
少し、文章があいまいなのですが、ワークシート上のセルの数式を絶対参照、相対参照する方法と読み替えます。
Sub testFormula()
MsgBox AbsRel(ActiveCell)
End Sub
'ユーザー定義関数を作りましたので、試してみてください。
Function AbsRel(mRange As Range)
Dim mStyle As Integer
Const ABSO As Integer = xlAbsolute
Const RELAT As Integer = xlRelative
If mRange.HasFormula And Not mRange.HasArray Then
If InStr(mRange.FormulaLocal, "$") > 0 Then
mStyle = RELAT '相対
Else
mStyle = ABSO '絶対
End If
AbsRel = Application.ConvertFormula( _
Formula:=mRange.FormulaLocal, _
fromReferenceStyle:=xlA1, _
toReferenceStyle:=xlA1, _
toabsolute:=mStyle)
End If
End Function
>「Number」が「値」ではなく、
>あるセルの数値を参照したいとき、のやり方です。
セルの数値とInputBox で入れる Number とは、変数では、共有できません。仮に、Variant 型にしても、Set で、数値を格納するときにエラーが出てしまいます。
Set cell_a = Application.InputBox("セル0", Type:=8)
Number =cell_a.Value
という形ぐらいだと思います。
ご回答ありがとうございます。
ご丁寧な説明をしていただいたおかげで、
解決することができました。
まだまだわからないことだらけですが、
またよろしくお願いします。
No.1
- 回答日時:
こんばんは。
多分こんなことがしたいのかなと思いますが
Sub sample1()
Dim Number
Dim cell_a As Long
Dim cell_b As Long
Dim yourrange As String
Number = InputBox("数字を入力してください")
cell_a = InputBox("セル1")
cell_b = InputBox("セル2")
yourrange = Range(Cells(cell_a, 1), Cells(cell_b, 1)).Address
Cells(1, 1).Formula = "=" & Number & "*sum(" & yourrange & ")"
End Sub
いかかでしょう?
この回答への補足
早速のご回答ありがとうございました!!
お忙しい中恐れ入ります。
だいたいわかってきたのですが、もしご存知でしたら、
1つのセルをワークシート関数の中で、絶対参照、相対参照する方法を教えていただければと思います。
上記例の中で「Number」が「値」ではなく、
あるセルの数値を参照したいとき、のやり方です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) エクセルのINDEXについて 2 2022/04/17 21:41
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) エクセルの関数式を教えてください。 2 2022/11/29 21:09
- Excel(エクセル) 時間差を求めるマクロコードを教えてください。 4 2022/05/17 18:22
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vbaで指定したセルより下の行を...
-
VBAでの SendKeysの変数指定方法
-
写真貼り付けを3列で折り返したい
-
エクセルでセルをクリックする...
-
Excelマクロ セルを行頭に移動
-
マクロを教えてください
-
【マクロ】1つのセルから結合...
-
excel マクロでの特殊文字入力方法
-
(エクセルVBA)セルを左クリッ...
-
VBA Rangeの足し算
-
セルをクリックしたら色を変え...
-
Excelで数値の変化をカウントし...
-
結合セル内の値を、結合解除後...
-
エクセル VBA アクティブセル...
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
チェックボックスをクリックし...
-
別ブックをダイアログボックス...
-
Excelで空白セル直前のセルデー...
-
vba 2つの条件が一致したら...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbaで指定したセルより下の行を...
-
エクセルでセルをクリックする...
-
VBAでの SendKeysの変数指定方法
-
Excel VBA:フォーム←→セルのア...
-
エクセルマクロで「セルのサイ...
-
Excelマクロ セルを行頭に移動
-
マクロのデータ削除
-
セルをクリックしたら色を変え...
-
IF関数で違う値もTRUEになる
-
Excel VBA で色付きのセルの値...
-
excel マクロでの特殊文字入力方法
-
【EXCEL-VBA】特定の値の入った...
-
(エクセルVBA)セルを左クリッ...
-
ロックされていないセル内をクリア
-
ダブルクリックでセルに色をつ...
-
ファイルサーバー上のexcelファ...
-
Excelでプルダウンからフィルタ...
-
VBA Rangeの足し算
-
【VBA】アクティブセルだけ背景...
-
ExcelVBA コンボボックスに入力...
おすすめ情報