プロが教えるわが家の防犯対策術!

お世話になります。

以下のように配列Listを宣言し、
その中に数式を仕込みたい場合の記述方法をお聞きしたく思います。

Dim List As String
List = "A,B,C,数式"

私の場合、ここで記述する数式が以下になるのですが、
数式内に含まれるカンマ "," によって配列が分割されてしまいます。

数式 = "=OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())), 0, -3)"

…分割後…
"=OFFSET(INDIRECT(ADDRESS(ROW()"
"COLUMN()))"
"0"
"-3)"

なんとかカンマをエスケープできるような記述方法を探しているのですが、
うまく見つかりませんので皆様にご教授いただきたく思い質問しました。

お手数をおかけしますが宜しくお願いします。

質問者からの補足コメント

  • うーん・・・

    申し訳ありません。

    説明不足&変数宣言に関して勘違いがありました。
    ※宣言はVariantでなく、String型です。

    説明を補足します。

    入力規則(Validation)で、
    変数Listに格納した文字列をリスト表示させようとしています。

    現在、私の手元では以下のように記述しています。


    Dim List As String
    List = "A,B,C,=OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())), 0, -3)"

    If 条件 Then
    Target.Validation.Add Type:=xlValidateList, Formula1:=List
    End If


    リストが適用されたセルを確認すると、
    数式部分がカンマで分割されて表示されてしまいます…

    なんとか数式を分割せずに適用させる方法はないでしょうか?

      補足日時:2018/09/05 14:11

A 回答 (3件)

あくまでもカンマを分割するという前提で


前のお二人が仰った方法を応用して、
最初の3つのカンマを他の文字に置き換えて、その文字で分割すれば良いですね。

Sub test()
  Dim s1 As String
  Dim s2 As String
  Dim a As Variant

  s1 = "A,B,C,D,E,F"
  s2 = Replace(s1, ",", vbTab, , 3) '最初の3つのカンマをTABに置き換える
  a = Split(s2, vbTab)
  MsgBox a(UBound(a)) '=> D,E,F
End Sub
    • good
    • 0

状況がよくわからないのですが、


List = "A,B,C,数式"
の部分をあなたが自由に設定できる立場なら
List = "A|B|C|数式"のように
区切り文字を数式で使用されていない文字にしてはいかがでしょうか。(例えば|とします)
分割は
分割データ=split(list,"|")
で可能です。

もし、あなたが自由に設定できない立場なら、
(listに設定する文字は、実はファイルから読んでいて、ファイルへ書き込むのは他の会社の場合等)
分割データを取得するとき、自前で構文解析をしながら、データの分割をするような関数を作る以外にないかと。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

同じくご指摘の通り、いくつか質問内容に不備がありました。
申し訳ございません。

補足に詳細を記載しておりますが、
タイトルと不一致の内容となってしまいましたので、
タイトルを改めて再投稿しようと思います。

お手数をおかけしました。

お礼日時:2018/09/05 15:53

こんにちは



>以下のように配列Listを宣言し、
>Dim List As String
Listは普通の文字列型の宣言になってるけれど??

>数式内に含まれるカンマ "," によって配列が分割されてしまいます。
何をどうしたくて、何を行っているのかわかりませんが。文字列が勝手に分割されることはないと思いますので、何かの処理をしようとしたらそう解釈されちゃったってことなのでしょうか?

「配列」とあるので、その文字列をSplitで配列化しようとしているのでしょうか?
でしたら、区切り文字をカンマ以外に設定するのが一番簡単かと思います。
あるいは、数式内のカンマを別の文字にしておいて、分割(?=何かの処理)後にカンマに入れ替えるといった方法も考えられます。

普通に Array(A,B,C) の形式で配列を設定するのなら、そのままカンマが利用できるはずです。
 Dim list() As Variant
 list = Array("A", "B", "数式1,数式2,数式3,数式4")
とか。
(このような設定方法を取る場合は、型宣言をVariantにしておかないとうまくいかないようですが)


いずれにしろ、何をどう処理しているのかが不明なので、適切な回答にはならないと思いますけれど・・・
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ご指摘の通り、いくつか質問内容に不備がありました。
申し訳ございません。

補足に詳細を記載しておりますが、
タイトルと不一致の内容となってしまいましたので、
タイトルを改めて再投稿しようと思います。

お手数をおかけしました。

お礼日時:2018/09/05 15:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています