• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:R1C1形式について)

R1C1形式についての2つのコード

このQ&Aのポイント
  • R1C1形式を使用したExcel VBAコードについての質問です。1つ目のコードを2つ目の形式に変換したいです。
  • 1つ目のコードを2つ目のコードの形式に変換する方法を教えてください。
  • Excel VBAでのR1C1形式の変換について質問です。

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

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

R1C1参照形式ではない状態(A1形式 列番号がA,B,C・・・になっている状態)にして、 .Value = .Valueの行にブレークポイントを付けて実行すれば、 Columns(18) (R列)に入る数式がA1形式で表示されるので、それをコピーして .Formula= に貼り付ければいい。 絶対参照にしたければ、「$」をつける。 やってみると、 =IF(COUNT(I2,J2)=2,I2*J2,"") の数式になるので、 .Formula="=IF(COUNT(I2,J2)=2,I2*J2,"""")" .Formula="=IF(COUNT($I$2,$J$2)=2,$I$2*$J$2,"""")" ということか。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

普通VBAの解説書などにはこんな式は載っていません。余りはやらない、と言うことだと思う。 マクロの記録かな。どこかにこんな書き方載ってましたか。 解読しても良いが、質問には何をしたいか、文章で明記すべきと思う。 前半はA2セルからA列データ最終行までの該当件数を出す式を設定しているの穴 もともと、VBAでは、セルに式をいれるのは邪道で、処理をVBAでして、値をセルにセットすれば良い。 >Columns(18) R列としたほうがわかりやすい。 >With .Columns(8) Withはオブジェクトについて、プロパティなど複数諸設定をするとき便利だが 1つの式しか要れないときにこんなのを使うと、コード文字数が増えるだけ。 >rc[-9], 18-9+1=10 J列   +1はRCの[ ]内が隔たりを表すので加えている >rc[-8])= 18-8+1=11 K列 >rc[-9],rc[-8])= セル範囲を表す部分だから、は:のミス? >if(count(rc[-9],rc[-8])=2 意味は、数字が入っているセルが2セルなら >rc[-9]*rc[-8],"""")" 掛け算をする式を入れて、そうでなければ空白(式を入れない) >With Range("A2", Range("A" & Rows.Count).End(xlUp)) With .Columns(18)  前の行のコードは行範囲を指定しているだけ。With .Columns(18)は列ではR列を指定している。 結局A列のデータ行数(セル範囲)だけ、R列における範囲でもでも考えている。 その場合は、Range("R2","R" & d) と書ける。dはA列最終データ行番号。 テスト例 Sub test06() d = Range("A" & Rows.Count).End(xlUp).Row MsgBox d Range("R2:R" & d).FormulaLocal = "=A2" End Sub これでR2:R5に、=A2.=A3,=A4・・の式が入った(とりあえず簡略例)。 ーー 上記テストでは=A2にした部分は、質問では "=if(count(rc[-9],rc[-8])=2,rc[-9]*rc[-8],"""")" そこで テスト例で Sub test07() d = Range("A" & Rows.Count).End(xlUp).Row MsgBox d MsgBox "=IF(COUNT(I2:I" & d & ")=2,J2*K2,"""")" Range("R2:R" & d).FormulaLocal = "=IF(COUNT(J2:J" & d & ")=2,J2*K2,"""")" End Sub ーー テストデータ A列 A3=2 A5=5 以下A列は空白セル。 このA5が最下行の5を決定 ーー J列  K列 ー 3 2 ー 4 6 ー ー5 2 J2:J5 にある数字データが2セルで条件に合致 その場合 R列にはR2:R5 ー 6 ー 24 でシートの式は、R2は =IF(COUNT(J2:J5)=2,J2*K2,"") === 日頃はR1C1を使わず慣れないものだから「面倒なことだ。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

>.FormulaR1C1 = "=if(count(rc[-9],rc[-8])=2,rc[-9]*rc[-8],"""")" 「,」ではなく「:」の間違いですね。 .FormulaR1C1 = "=if(count(rc[-9]:rc[-8])=2,rc[-9]*rc[-8],"""")" 以下でためしてください。 .Formula = "=IF(COUNT(J2:K2)=2,J2*K2,"""")"

関連するQ&A

専門家に質問してみよう