Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2010)
文字列の結合
投稿日時: 20/10/02 09:05:10
投稿者: ドラテラ

こんにちは ドラテラです
 
文字列の結合を行いたいと思い、以下のソースを作りました。
  Dim BufText As Variant,BufTexts As Variant
  ReDim BufText(0): Textcnt = 0
 
 For MyRow = 1 to 100
    If sheets("Data").cells(MyRow,2) > 0 Then
       If Textcnt > 0 then ReDim Preserve BufText(Textcnt)
       BufText(TextCnt) = Sheets("Data").cells(MyRow,3)
       Textcnt = Textcnt + 1
  End If
 Next
 
  BufTexts = Join(BufText, ",") ---- ❶
 
ソースを実行したところ
BufText(0) = "大阪"
BufText(1) = "東京"
BufText(2) = "名古屋"
が格納され
 
❶の結果が"大阪,東京,名古屋" となりました。
求めている結果は
"大阪","東京","名古屋"です。
 
どのようにすれば求めている結果が出せますでしょうか。
お力をお貸しください。

回答
投稿日時: 20/10/02 09:14:39
投稿者: simple

BufText(TextCnt) = Sheets("Data").cells(MyRow,3)

BufText(TextCnt) = """" & Sheets("Data").cells(MyRow,3) & """"
としたらどうでしょうか。

投稿日時: 20/10/02 09:32:14
投稿者: ドラテラ

Simpleさん ありがとうございます。
 

simple さんの引用:
BufText(TextCnt) = Sheets("Data").cells(MyRow,3)

BufText(TextCnt) = """" & Sheets("Data").cells(MyRow,3) & """"
としたらどうでしょうか。

 
改修した結果は
""大阪","東京","名古屋""となりました。
文字列の結合となったのですが、前と後ろにダブルクォーテーションがついています。
 
この後選んだ結果のシートを選ぼうと思っている
Worksheets(Array("大阪", "東京", "名古屋")).Select
のかわりを
Worksheets(Array(BufTexts).Select
としたいです。
前後のダブルクォーテーションが悪さをしているように思われます。
 
文字列が結合できたので一歩前進ですが、デバックを要求されてしまいました。
再度お力をお貸しいただければと思います。

回答
投稿日時: 20/10/02 09:50:59
投稿者: simple

>文字列の結合となったのですが、前と後ろにダブルクォーテーションがついています。
それはローカルウインドウかなにかの表示を見て、
そうおっしゃっているんでしょうか?
 
最初と最後の"は文字列であることを示すもので、
実体としては、
"大阪","東京","名古屋"
なんだと思いますよ。
Debug.print s
などとしてその結果を確認して下さい。

回答
投稿日時: 20/10/02 09:56:37
投稿者: Suzu

Array は、「,」にて区切られた 引数群 を配列にする関数です。
 
難しく考えずに Split関数を使えば良いのでは?
 
 
ですが
 WorkSheets(配列).Select
を行いたいのですよね?
 
Arryを使う以前に、そもそも 配列 になっている変数がありますよね。
 
WorkSheets(BufText).Select
 
で良いですよね。

投稿日時: 20/10/02 10:40:38
投稿者: ドラテラ

Simpleさん ありがとうございます。
 

simple さんの引用:
>文字列の結合となったのですが、前と後ろにダブルクォーテーションがついています。
それはローカルウインドウかなにかの表示を見て、
そうおっしゃっているんでしょうか?
 
最初と最後の"は文字列であることを示すもので、
実体としては、
"大阪","東京","名古屋"
なんだと思いますよ。
Debug.print s
などとしてその結果を確認して下さい。

 
結果を確認してみたら仰せの通りでした。
申し訳ありませんでした。
下名配列アレルギーのため軽くパニックになっておりました。
もっと理解できるように頑張ります。

投稿日時: 20/10/02 10:44:02
投稿者: ドラテラ

Suzuさん ありがとうございます。
 

Suzu さんの引用:
Array は、「,」にて区切られた 引数群 を配列にする関数です。
 
難しく考えずに Split関数を使えば良いのでは?
 
 
ですが
 WorkSheets(配列).Select
を行いたいのですよね?
 
Arryを使う以前に、そもそも 配列 になっている変数がありますよね。
 
WorkSheets(BufText).Select
 
で良いですよね。

 
WorkSheets(BufText).Selectでできました。
当方の配列の勉強不足・理解不足が原因です。
もっと勉強させていただきます。
 
本当にありがとうございました。