[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セルに入っている関数の数字をマクロで変更』(イチゴパフェ)
Excelのマクロを使用して
B1に「=A1」という関数が入っていて
マクロを実行したら「=A3」にする
次に実行したら「=A5」次に実行したら「=A7」という風に関数を2行ずつ繰り上げる事はできないでしょうか?
以上よろしくお願いします。
< 使用 Excel:Microsoft365、使用 OS:Windows10 >
Sub test() If Range("D1") = "" Then Range("D1") = 3 Range("B1").Formula = "=A" & Range("D1") Range("D1") = Range("D1") + 2 End Sub (フォーキー) 2023/01/27(金) 10:24:29
With ActiveCell .Value = "=" & .Precedents(3).Address(0, 0) End With
(こんな感じかな) 2023/01/27(金) 10:29:53
いろんな書き方があると思いますが、一例です。
Sub test()
Dim rng As Range Dim rwnum As Integer Const colstr As String = "A" Dim myformula As String Set rng = ActiveSheet.Range("B1") myformula = Replace(rng.Formula, "=", "") rwnum = Replace(myformula, colstr, "") * 1 rwnum = rwnum + 2 rng.Formula = "=" & colstr & rwnum Set rng = Nothing End Sub
(MK) 2023/01/27(金) 10:30:38
こんな感じかなさん、ありがとうございます。
これはどうやって使うんですか?
MKさん、ありがとうございます。
他のセルを使わないでできてるので凄いですね…
ただ、どういう仕組みか理解でできない…
よろしければ解説お願いできないでしょうか?
(イチゴパフェ) 2023/01/27(金) 10:58:57
私のコードは非常に回りくどい方法をとってます。
Sub test()
Dim rng As Range Dim rwnum As Integer
'B1の数式の列を定数で指定(今回はA) Const colstr As String = "A"
Dim myformula As String
'変数rngにアクティブシートのB1セルをセット Set rng = ActiveSheet.Range("B1")
'変数rngに格納したセルの数式の=を除いた部分を取得しmyformulaに代入 myformula = Replace(rng.Formula, "=", "")
'myformulaに代入した文字列から定数colstrに格納した文字列(今回はA)を取り除いた部分 '(行番号)をrwnumに格納(*1は念のため/1をかけることによって数字から数値に変換) rwnum = Replace(myformula, colstr, "") * 1
'取得した行番号に2を加算 rwnum = rwnum + 2
'rngに数式を入力/”=”と列番号(A)と行番号を結合した文字列 rng.Formula = "=" & colstr & rwnum
'変数rngの解放 Set rng = Nothing End Sub (MK) 2023/01/27(金) 11:35:35
こんな感じかなさんのコードは変えたい数式が 入っているセル(今回はB1)をアクティブにして おいて実行します。 (MK) 2023/01/27(金) 11:39:24
Sub Sample() Dim dic As Object Dim rng As Range Dim str As String Dim key Set dic = CreateObject("Scripting.Dictionary")
With ActiveCell If .Precedents Is Nothing Then Exit Sub For Each rng In .Precedents.Areas dic(rng.Address(0, 0)) = rng.Offset(2).Address(0, 0) Next str = .Formula For Each key In dic str = Replace(str, key, dic(key)) Next .Value = str End With End Sub
(こんな感じかな) 2023/01/27(金) 12:06:32
本当に↓なんですか?
B1に「=A1」という関数が入っていて
もしもそういうことであれば、
(1) 数式から"="を除いて【セル番地】を取り出す (2) セル番地から2行さがった【セル番地】を調べる (3) B1セルに(2)のセル番地のセルを参照する数式を書き込む
ということだけ考えればよくなります。
なので、例示のとおりであれば↓のようなことでもOKだとおもいます。
Sub まくろ() Dim セル番地 As String
セル番地 = Replace(Range("B1").Formula, "=", "") '(数式から=を取り除いて)【セル番地】を取り出す Range("B1").Formula = "=" & Range(セル番地).Offset(2, 0).Address(False, False) 'B1セルに【セル番地】が示すセルから2行下がったセルを参照する数式を書き込む End Sub
(もこな2) 2023/01/27(金) 12:20:10
こんな感じかなさんありがとうございます。
まだ教科書でたどり着いてないエリアのものなので
メモして後に生かす様にします。
結構シンプルな事をしたかったんですがマクロで行うと結構大変なんですね…
出来て良かったです!
もこな2さん、ありがとうございます。
凄いシンプルですね…
このAddress(False, False)これは何なのでしょうか?
セルの住所(番地)を調べるコマンドですか?
FormulaってのはFormulaやFormulaR1C1などありますが
どういう違いなのでしょうか?
以上よろしくお願いします。
(イチゴパフェ) 2023/01/27(金) 13:54:45
Rangeオブジェクト.Address(False, False)
↑を詳しく書くと↓のようになります。
Rangeオブジェクト.Address(RowAbsolute:=False, ColumnAbsolute:=False)
[[20230113144923]]でも述べましたが、わからない命令などがあればまずはネット検索してみてください。
たとえば、「VBA Address」というキーワードで検索すると↓のようなサイトがヒットすると思います。
【参考】 https://www.moug.net/tech/exvba/0050094.html https://excel-ubara.com/excelvba1/EXCELVBA384.html
まずは、そういったサイトを読んでみてそれでもわからなければ再度聞いてください。
(「セルの住所(番地)を調べるコマンドですか?」といっているので概ねアタリはついていると思いますが)
■2
>FormulaってのはFormulaやFormulaR1C1などありますがどういう違いなのでしょうか?
こちらも、まずはネット検索してみましょう。
【参考】 https://www.moug.net/tech/exvba/0050098.html https://excel-ubara.com/excelvba1/EXCELVBA338.html
(もこな2) 2023/01/27(金) 16:16:30
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.