• ベストアンサー

エクセルVBA 文字列の結合で教えてください

また、お世話になります。 前に下のような質問をさせていただき、うまくできました。今度は、文字列と、変数msとしたシートのS2の文字列 たとえば、 S2に2007年 とあるとして、 「2007年06月売上リスト」 と別ブックに保存したいのですが、先ほどご回答いただいたものを参考にさせていただいても答えをだませんでした。よろしくお願いします。 【前回の質問】 教えてください。msというシートのS2に文字列があり、それを新規ブックの名前にして、いま入れているフォルダの中に保存したいのですが、エラーになってしまいます。どこが間違ってますか? ActiveWorkbook.SaveAs (ThisWorkbook.Path & \ ms.Range("S2").Value) 答え ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & ms.Range("S2").Value

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

  • ベストアンサー
  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.5

#2です。 これで、どうですか? Dim ms As Worksheet Set ms = ThisWorkbook.Worksheets("メイン") ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & ms.Range("S2").Value & "06月売上リスト"

reprogress
質問者

お礼

いろいろありがとうございました。できました!なぜか私のパソコン以外ので試したところできました。どうしてかわかりませんが。。。 お騒がせいたしました。

その他の回答 (7)

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.8

お早うございます。 No1です。 文字列「06月売上リスト」をそのまま付けて保存すると、7月になっても同じ「06月売上リスト」として 保存されますので、月は自動設定するようにしました。 Sub ブック保存()   Dim ms As Worksheet   Dim wPath As String   Dim wFlName As String   '   Set ms = ThisWorkbook.Worksheets("メイン")   wPath = ThisWorkbook.Path & "\"   wFlName = ms.Range("S2").Value & Format(Now, "mm月") & "売上リスト"   ActiveWorkbook.SaveAs wPath & wFlName End Sub ちなみに、セル「S2」の「2007年」も、参照する必要はないと思いますが・・・ 以下のようにすれは、良いのでは・・・ Sub ブック保存()   ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Format(Now, "yyyy年mm月") & "売上リスト" End Sub

reprogress
質問者

お礼

いろいろありがとうございました。なぜか私のパソコン以外ので試したところできました。新たな技まで教えていただきありがとうございます。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.7

#2です。 FileFormat(ファイルを保存するときのファイル形式)は省略可能です。 新しいファイルでは、現在使用されている Excel のバージョンでのファイル形式が既定のファイル形式となります。 参考までに。

  • vvooo
  • ベストアンサー率33% (3/9)
回答No.6

下記コードでは保存できます。 Sub Test() Dim ms As Worksheet Set ms = ThisWorkbook.Worksheets("メイン") ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & _       ms.Range("S2").Value & "06月売上リスト" & ".xls" End Sub

reprogress
質問者

お礼

このコードでできました。なぜか私のパソコン以外ので試したところできました。お騒がせいたしました。ありがとうございました。

  • vvooo
  • ベストアンサー率33% (3/9)
回答No.4

コードが小出しなのでよく分りませんが 拡張子が抜けているのではないですか? 最後に ・・・& ".xls" が必要なのでは?

reprogress
質問者

補足

ありがとうございます。 ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & ms.Range("S2").Value & "06月売上リスト" & ".xls" としてみましたが、同じように「オブジェクト変数またはWithブロック変数が設定されていません」となります。 Dim ms As Worksheet Set ms = ThisWorkbook.Worksheets("メイン") と定義しているのですが、ここがきちんと処理されてないんでしょうか?

  • vvooo
  • ベストアンサー率33% (3/9)
回答No.3

Worksheets("ms")  ↓ Worksheets(ms) では?

reprogress
質問者

補足

こんばんは。やってみたところ「型が一致しません」となりました。 ひとつ思ったのですが、関係あるのかなぁ? ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" ~ としていて、 その時点でアクティブになっているブックは、新規にコピーしたブック(仮に「Book1」)であり、変数をmsとしているブックと違いますよね? それって関係ないでしょうか?

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.2

質問は文字列の結合ということなので、以下でどうでしょうか? ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Worksheets("ms").Range("S2").Value & "06月売上リスト"

reprogress
質問者

補足

ありがとうございました。やってみましたが、エラーになりました。 「インデックスが有効範囲にありません」となりました。 変数 msは、 Dim ms As Wrksheet Set ms = ThisWorkbook.Worksheets("メイン") としています。これには関係してきますか?

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.1

こんにちは。 以下のように変更してみてください。 ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Worksheets("ms").Range("S2").Value

reprogress
質問者

補足

ありがとうございました。 今回は、たとえば S2に2007年 とあるとして、 「2007年06月売上リスト」 とブックを作成できるようにしたいと思っています。