Excel VBA質問箱 IV

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

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


4462 / 13646 ツリー ←次へ | 前へ→

【56486】5Aを005Aにしたい Tsuyo 08/6/19(木) 10:07 質問[未読]
【56488】Re:5Aを005Aにしたい Tsuyo 08/6/19(木) 10:10 質問[未読]
【56489】Re:5Aを005Aにしたい kanabun 08/6/19(木) 10:52 発言[未読]
【56549】Re:5Aを005Aにしたい Tsuyo 08/6/20(金) 12:21 発言[未読]
【56491】Re:5Aを005Aにしたい ハチ 08/6/19(木) 12:56 発言[未読]
【56493】Re:5Aを005Aにしたい kanabun 08/6/19(木) 13:16 発言[未読]
【56494】Re:5Aを005Aにしたい kanabun 08/6/19(木) 13:18 発言[未読]
【56504】Re:5Aを005Aにしたい ハチ 08/6/19(木) 16:37 発言[未読]
【56534】Re:5Aを005Aにしたい Tsuyo 08/6/20(金) 9:32 発言[未読]
【56535】Re:5Aを005Aにしたい Tsuyo 08/6/20(金) 9:37 発言[未読]
【56545】Re:5Aを005Aにしたい Yuki 08/6/20(金) 11:20 発言[未読]
【56550】Re:5Aを005Aにしたい Tsuyo 08/6/20(金) 12:25 お礼[未読]

【56486】5Aを005Aにしたい
質問  Tsuyo E-MAIL  - 08/6/19(木) 10:07 -

引用なし
パスワード
   お世話になります。
題名にも書かせてもらったのですが、
例えば、
エリア  番号
 T7   172
 T7   127A
 C7   005
 C7   005A
というデータがあり、これを連結して
 T7127
 T7127A
 C7005
 C7005A
のような管理番号にしたいのです。

連結番号 = 連結番号 & エリア.Value & _
 Format(エリア.Offset(0, 1).Value, "000")
というような記述にすると返ってくる値は  
 T7127
 T7127A
 C7005
 C7000
のようになってしまいます。
C7005となってしまうのをC7005Aと表示させるには
どのように記述したら良いでしょうか?
答えて頂ける方がいらっしゃいましたら、お願いします。

【56488】Re:5Aを005Aにしたい
質問  Tsuyo E-MAIL  - 08/6/19(木) 10:10 -

引用なし
パスワード
   すみません。
>連結番号 = 連結番号 & エリア.Value & _
> Format(エリア.Offset(0, 1).Value, "000")
の部分は
連結番号 = エリア.Value & Format(エリア.Offset(0, 1).Value, "000")
でした。
改めてよろしくお願いします。

【56489】Re:5Aを005Aにしたい
発言  kanabun  - 08/6/19(木) 10:52 -

引用なし
パスワード
   ▼Tsuyo さん:
こんにちは。

> Format(エリア.Offset(0, 1).Value, "000")
のあとに 「A」などの文字を(それがあれば)付加したいってことですよね?

正規表現をつかって、文字列中から「数字でない部分」を取り出して
それを付加してみました。(C列に連結文字列を書き出しています)

 Dim a, c, i As Long, ii As Long
 Dim ss As String, s As String
 
 a = Range("A2", Cells(Rows.Count, 1).End(xlUp)).Resize(, 2).Value
 ii = UBound(a)
 ReDim c(1 To ii, 0)
 With CreateObject("VBScript.RegExp")
   .Pattern = "\D+"  '--- 数字でない文字列
   For i = 1 To ii
     ss = a(i, 2)
     s = "": If .Test(ss) Then s = .Execute(ss)(0)
     c(i, 0) = a(i, 1) & Format$(Val(ss), "000") & s
   Next
 End With
 Range("C2").Resize(ii).Value = c

※もっと簡単な方法があるかも知れません。

【56491】Re:5Aを005Aにしたい
発言  ハチ  - 08/6/19(木) 12:56 -

引用なし
パスワード
   ▼Tsuyo さん:
>すみません。
>>連結番号 = 連結番号 & エリア.Value & _
>> Format(エリア.Offset(0, 1).Value, "000")
>の部分は
>連結番号 = エリア.Value & Format(エリア.Offset(0, 1).Value, "000")
>でした。
>改めてよろしくお願いします。

この元データは、005とExcel上で表示されている ということですか?
.Text & .Offset(0, 1).Text

で、どうでしょうか?

【56493】Re:5Aを005Aにしたい
発言  kanabun  - 08/6/19(木) 13:16 -

引用なし
パスワード
   ▼ハチ さん:
>.Text & .Offset(0, 1).Text
>
>で、どうでしょうか?

おぉー、そうでした。
数字部分が 最初から 3桁で Format されているのであれば、
単に連結すればいいのでした。
Tsuyo さん どうも スミマセン m(__)m

【56494】Re:5Aを005Aにしたい
発言  kanabun  - 08/6/19(木) 13:18 -

引用なし
パスワード
   あれ?でも タイトルは
 
> 5Aを005Aにしたい 

なんですね??

【56504】Re:5Aを005Aにしたい
発言  ハチ  - 08/6/19(木) 16:37 -

引用なし
パスワード
   ▼kanabun さん:
>あれ?でも タイトルは
> 
>> 5Aを005Aにしたい 
>
>なんですね??

そうですねぇ。どっちなんでしょ?
kanabun さんのコードのほうが確実だと思います^^

【56534】Re:5Aを005Aにしたい
発言  Tsuyo E-MAIL  - 08/6/20(金) 9:32 -

引用なし
パスワード
   ▼ハチ さん:
>▼kanabun さん:
>>あれ?でも タイトルは
>>> 5Aを005Aにしたい 
>>なんですね??
>そうですねぇ。どっちなんでしょ?

返事が遅くなってしまい申し訳ありません!!
しかも質問も表題と内容が違ってしまっているので、ご迷惑をお掛けしてしまったようで<m(__)m>。 間違っているのは例のほうで、5Aを005Aにしたいという表題のほうが質問事項です。
でもkanabunさんに教えていただいたtextプロパティも私知りませんでした・・・
調べると「Text プロパティは、Range オブジェクトの場合は、値の取得のみ可能です。Value が数値だけを表示するのに対して、Text は、書式設定まで含めて出力します。」
これは使えますね。ほんとに基礎的なことが抜けていていやになります。
ありがとうございました。

【56535】Re:5Aを005Aにしたい
発言  Tsuyo E-MAIL  - 08/6/20(金) 9:37 -

引用なし
パスワード
   ▼ハチ さん:
Textプロパティを教えていただいたのはハチさんでした。
重ね重ねすみません<m(__)m>

【56545】Re:5Aを005Aにしたい
発言  Yuki  - 08/6/20(金) 11:20 -

引用なし
パスワード
   ▼Tsuyo さん:
こんにちは。
   A     B    C
>1 エリア  番号
>2  T7   172
>3  T7   127A
>4  C7   5
>5  C7    5A

として C列に出力
Sub TEST()
  Dim i  As Long
  Dim sV As String
  With Worksheets("Sheet4")
    For i = 2 To 5
      sV = Val(Cells(i, 2))
      .Cells(i, 3).Value = .Cells(i, 1) & _
        Replace(.Cells(i, 2).Value, sV, Format(sV, "000"))
    Next
  End With
End Sub

で、どうでしょう。

【56549】Re:5Aを005Aにしたい
発言  Tsuyo E-MAIL  - 08/6/20(金) 12:21 -

引用なし
パスワード
   ▼kanabun さん:
お世話になります。
返事が遅くなり申し訳ありませんでした。
コードをコピーし使ってみましたが、できました(T_T)

ですが、私のレベルでは内容を理解しきれないため
そのまま使っては申し訳ないのでせめて解析してからと思ったのですが
まだ途中です・・・
時間がかかりすぎてしまったので返信をしましたが
大変勉強になりますので、最後まで理解できるよう調べてみたいと思います。
ありがとうございました。

【56550】Re:5Aを005Aにしたい
お礼  Tsuyo E-MAIL  - 08/6/20(金) 12:25 -

引用なし
パスワード
   ▼Yuki さん:
お世話になります。

「Val関数は、指定した文字列に含まれる数値を適切なデータ型に変換して返しますが、「10kg」という文字列から「10」を取得する事ができます。」
これ知りませんでした。

「Replace(expression,find,replace[,start[,count[,compare]]])
 引数expressionには、置換の対象となる文字列を指定します。
 引数findには、検索する文字列を指定します。
 引数replaceには、置き換える文字列を指定します。」
これも知りませんでした。

この2つの関数を使えば出来るということですね。
大変助かりました。
ありがとうございました。

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