
ちょっと気になったので質問します。
セルにA1形式で文字列として参照が記述されていると、
ワークシートではIndirectなど、VBAではRangeなどでその文字列を受け取って参照できますが、
R1C1形式の相対参照の文字列として記述されていた場合には参照を受け取れるのでしょうか。
Mid関数を使うにしてもR[2]C[2]、RC[1]などと文字数が変わりますから[]内の数値や省略された0を簡単に(条件分岐とかを用いない程度に)抽出することはできないということでしょうか。
Range("R[2]C[2]")あたりも無理なようですし。
No.3ベストアンサー
- 回答日時:
No1です
>これを今A1形式であるところの当環境でVBAを使ってもいいので読み取って、座標を再現したいと思います。
どの程度のバリエーションがあるのか(絶対参照、相対参照など)不明ですが、簡単そうなのは、エクセルに解釈させて変換してもらう方法でしょうか。
勿論、R1C1形式を解釈してA1形式に変換するプログラムを作成しても良いのですが、エクセルにやらせる方が簡単そうでしたので・・・
以下は、そんな一例です。
簡略化のため、元のテキスト(=参照アドレス)が正しいR1C1形式になっているかなどのチェックは行っていません。
そのままエクセルに解釈させて結果を求めているだけのものです。
サンプル(=添付図)では、A列に元のアドレスが存在すると仮定して、それが「A列に設定されていた場合に参照先となるはずのアドレス」をA1形式に変換してB列に表示するものです。
ご参考にでもなれば。
Sub Sample()
Dim c As Range, s As String, f As String
For Each c In Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
If c.Value <> "" Then
s = c.Text
On Error Resume Next
c.FormulaR1C1 = "=" & s
f = c.FormulaLocal
If Err.Number > 0 Then f = "##ERROR!"
If IsError(c.Value) Then f = c.Text Else f = Mid(f, 2)
c.Value = s
c.Offset(0, 1).Value = f
End If
Next c
End Sub

ありがとうございます。
A1形式のシート上に =R[2]C[2] と入力してエラーが出ることは確認していましたが、
VBA上で=を付して変換する発想がありませんでした。
ご提示いただいたコード内に他の発見もあり勉強になりました。
No.4
- 回答日時:
No.2 の回答者です。
> 文字列なので = RC[1] ではなくて RC[1] とあるわけです。
> RC[1]
> R[2]C[2]
残念ですが、文字列として、R1C1方式で、相対参照方式で存在するものは、基準点を設けないとA1方式には直りません。相対参照方式は、距離を表しても、位置を表すものではありません。絶対参照でないとできません。
簡単な例を示すと、
ActiveCell が、R2C1 にあるとして、=R[-2]C は、=A1048576
のことです。
ありがとうございました。
一応、盤面の左上が基準とされたものがVBAによって書き込まれたらしいので
(RC[1]という文字列がいま、シート上のどこに存在するかはもはや意味を持たない)、
RC[1] の省略された0を補えば、左上からの0,1という相対位置が再現できそうです。
基準点が左上でなくとも、どうやら同一の基準点らしいので、相対的にはすべての棋譜が再現できると考えています。
明らかに説明不足でした。お手数おかけしました。
No.2
- 回答日時:
> セルにA1形式で文字列として参照が記述されていると、
> ワークシートではIndirectなど、VBAではRangeなどでその文字列を受け取って参照できますが、
> R1C1形式の相対参照の文字列として記述されていた場合には参照を受け取れるのでしょうか。
具体的にどういうことなのでしょうか。
> Range("R[2]C[2]")あたりも無理なようですし。
ここから想像できるのは、A1方式の"C3" を取り出すのは、簡単なことです。
そういう使い方という事自体、まれですが。
R1C1方式のシート上で、A1に相当する位置に
=R[2]C[2]
Sub Test1()
Dim fml As String
If Range("A1").HasFormula Then
fml = Range("A1").FormulaLocal 'シートの表示はどちらでも構わない
End If
MsgBox Mid(fml, 2)
End Sub
C3 と取り出せます。
adr = Range("A1").DirectPrecedents.Address(0, 0)
こういう使い方もあります。
もし、具体的な内容がありましたら、ご披露ください。
質問の書き方にわかりづらさがあり、誤解を生じてしまったようです。すみません。
やりたいことは、棋譜の読み取りのようなものです。
A1形式のワークシート上のセルに文字列として RC[1] などと1行に記されています。
文字列なので = RC[1] ではなくて RC[1] とあるわけです。
RC[1]
R[2]C[2]
・
・
と続きます。
これを今A1形式であるところの当環境でVBAを使ってもいいので読み取って、座標を再現したいと思います。
R1C1形式に切り替えるとかVBA上で複雑な式を組み立てて読み取る前に、より簡潔な方法がないかとお知恵を拝借したかった次第でした。
No.1
- 回答日時:
こんにちは
>R1C1形式の相対参照の文字列として記述されていた場合~
関数の設定の入力のことでしょうか?
仮に表示上はA1形式であっても、表示方法を変えればR1C1で表示されますよね?
VBAから参照する場合は、Range.FormulaLocal、Range.FormulaR1C1 として求めたい形式で取得できますので、どちらの形式なのかわからないものを扱うことはまずないと言えるでしょう。
INDIRECTなどの内容を扱おうとするような場合は、元々が文字列ですので、どちらの形式になっているのかを注意する必要が出てきそうですが、それほど多い事ではなさそうな気がします。
>Mid関数を使うにしてもR[2]C[2]、RC[1]などと文字数が変わりますから~
文字数で固定的に扱おうとするのは危険だと思いますよ。
(というか、多分、失敗する可能性が高いと思います)
表示形式に関わらずとも、A8とB125で文字数がかわりますし、$C$20となっていても文字数は変わりますから。
質問の書き方にわかりづらさがあり、誤解を生じてしまったようです。すみません。
やりたいことは、棋譜の読み取りのようなものです。
A1形式のワークシート上のセルに文字列として RC[1] などと1行に記されています。
文字列なので = RC[1] ではなくて RC[1] とあるわけです。
RC[1]
R[2]C[2]
・
・
と続きます。
これを今A1形式であるところの当環境でVBAを使ってもいいので読み取って、座標を再現したいと思います。
R1C1形式に切り替えるとかVBA上で複雑な式を組み立てて読み取る前に、より簡潔な方法がないかとお知恵を拝借したかった次第でした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のExcelファイルをマージす...
-
VBAでCOPYを繰り返すと、処理が...
-
【ExcelVBA】5万行以上のデー...
-
エクセルのマクロについて教え...
-
ダブルクリックで貼り付けた画...
-
Excelマクロで使うVBAコードを...
-
Excelのマクロについて教えてく...
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
【マクロ】変数を使った、文字...
-
ExcelVBAでパワポを操作したい
-
testファイル内にある複数のpng...
-
(EXCEL超初心者)EXCELの関数(ま...
-
Excelのマクロについて教えてく...
-
算術演算子「¥」の意味について
-
[VB.net] ボタン(Flat)のEnable...
-
【ExcelVBA】値を変更しながら...
-
【マクロ】売上一覧YYYYMMDDHHS...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba Array関数について教えてく...
-
VBAでCOPYを繰り返すと、処理が...
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】シートの変数へ入れ...
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
【マクロ】並び替えの範囲が、...
-
Vba セルの4辺について罫線が有...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
VBAでユーザーフォームを指定回...
-
【マクロ】開いているブックの...
-
エクセルの改行について
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
算術演算子「¥」の意味について
-
Excelのマクロについて教えてく...
-
改行文字「vbCrLf」とは
-
ワードの図形にマクロを登録で...
-
VBAの「To」という語句について
-
【マクロ】変数を使った、文字...
おすすめ情報