Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3220 / 13644 ツリー ←次へ | 前へ→

【63475】日付と文字列の結合 マクロ 09/11/9(月) 22:50 発言[未読]
【63477】Re:日付と文字列の結合 ichinose 09/11/10(火) 6:38 発言[未読]
【63478】Re:日付と文字列の結合 Abebobo 09/11/10(火) 8:31 発言[未読]
【63480】Re:日付と文字列の結合 seg 09/11/10(火) 9:30 発言[未読]
【63483】Re:日付と文字列の結合 マクロ 09/11/10(火) 22:45 質問[未読]
【63485】Re:日付と文字列の結合 ichinose 09/11/10(火) 23:11 発言[未読]
【63492】Re:日付と文字列の結合 seg 09/11/11(水) 9:16 回答[未読]
【63503】Re:日付と文字列の結合 マクロ 09/11/13(金) 14:08 お礼[未読]

【63475】日付と文字列の結合
発言  マクロ  - 09/11/9(月) 22:50 -

引用なし
パスワード
   マクロで日付と文字を結合さした時

activecell.value(こっちが日付)&activecell.value(こっちが文字)

で書くと、

エクセルには「2009/10/1文字」とならず、「2009/10/01文字」と
すべてが文字列として認識してしまいます。

日付&文字と表示させる方法はどう書けばいいのでしょうか。

【63477】Re:日付と文字列の結合
発言  ichinose  - 09/11/10(火) 6:38 -

引用なし
パスワード
   ▼マクロ さん:
おはようございます。

>マクロで日付と文字を結合さした時
>
>activecell.value(こっちが日付)&activecell.value(こっちが文字)
こういうことは、ありえません、気持ちは、わかりますが・・・。


>
>エクセルには「2009/10/1文字」とならず、「2009/10/01文字」と
>すべてが文字列として認識してしまいます。

表示形式(コントロールパネルの地域のオプションの「日付」で指定)の問題で
どっちにしたって文字列ですよ!!


>日付&文字と表示させる方法はどう書けばいいのでしょうか。
>エクセルには「2009/10/1文字」とならず
          ↑こうしたいなら、
Sub test()
  Range("a1").Value = #10/1/2009#
  Range("b1").Value = "文字"
  MsgBox Format(Range("a1").Value, "yyyy""/""m""/""d") & Range("b1").Value
End Sub

【63478】Re:日付と文字列の結合
発言  Abebobo  - 09/11/10(火) 8:31 -

引用なし
パスワード
   一般機能で、ユーザー定義でやるようなこと?
Range("A1").NumberFormatLocal = "yyyy/m/d ""文""""字"""

【63480】Re:日付と文字列の結合
発言  seg  - 09/11/10(火) 9:30 -

引用なし
パスワード
   ▼マクロ さん:
>日付&文字と表示させる方法はどう書けばいいのでしょうか。

なぜ、そのような事がしたいのか理由をください。

【63483】Re:日付と文字列の結合
質問  マクロ  - 09/11/10(火) 22:45 -

引用なし
パスワード
   みなさん、ご教授ありがとうございます。

説明が足りず、すいません。

たとえば
range(B1)には"09"
range(C1)には"10"
range(D1)には"01"
range(E1)には"言葉"
という文字がそれぞれ、入っています。


range(A1)にこれらを結合させる数式を記述するなら・・
 =((B1&"/"&C1&"/"&D1)*1)&E1
と入力すると
40087言葉となり、(09/10/01言葉)日付と文字列が成功するのですが
マクロでこれを記入すとうまくいきません。

どのように記述すればいいのでしょうか。

【63485】Re:日付と文字列の結合
発言  ichinose  - 09/11/10(火) 23:11 -

引用なし
パスワード
   ▼マクロ さん:
こんばんは。


>たとえば
>range(B1)には"09"
>range(C1)には"10"
>range(D1)には"01"
>range(E1)には"言葉"
>という文字がそれぞれ、入っています。
では、・・・・。


Sub test()
  Dim b1 As Range
  Dim c1 As Range
  Dim d1 As Range
  Dim e1 As Range
  Set b1 = Range("b1")
  Set c1 = Range("c1")
  Set d1 = Range("d1")
  Set e1 = Range("e1")
  Range("b1:e1").Value = Array("'09", "'10", "'01", "言葉")
  MsgBox "これに対して・・・・"
  MsgBox CLng(CDate(b1.Value & "/" & c1.Value & "/" & d1.Value)) & e1.Value
End Sub

VBAでは、解釈に戸惑う *1より、わかりやすい Clngのほうが良いと思いますけど!!

【63492】Re:日付と文字列の結合
回答  seg  - 09/11/11(水) 9:16 -

引用なし
パスワード
   ▼マクロ さん:
Sub test()
  Dim strbuf As String
  strbuf = CStr((CLng(Range("B1").Value) + CLng(Range("C1").Value) + CLng(Range("D1").Value))) & Range("E1")
End Sub

まず、キャストと言う言葉を調べてみてください。
上記は、B1 C1 D1 をそれぞれlong型に変換(CLng)してから加算し
その値をString型に変換(CStr)し、E1のStringと結合してます。
本来ならString型に変換すべきですが、自動的にString型になっています。

また、VBは明示的に型変換を行わなくても
strbuf = Range("B1") + Range("C1") + Range("D1") & Range("E1")
で、解決してしまいます。

十分考慮して、コーディングしてください。

【63503】Re:日付と文字列の結合
お礼  マクロ  - 09/11/13(金) 14:08 -

引用なし
パスワード
   segさん、ichinoseさん、ご教授ありがとうございます。

教えていただいた内容で解決いたしました。
ありがとうございました。

3220 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free