Excel VBA質問箱 IV

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

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


3517 / 13645 ツリー ←次へ | 前へ→

【61725】指定文字の前までをコピーする まっちゃん 09/5/30(土) 9:06 質問[未読]
【61726】Re:指定文字の前までをコピーする かみちゃん 09/5/30(土) 9:15 発言[未読]
【61728】Re:指定文字の前までをコピーする まっちゃん 09/5/30(土) 9:43 回答[未読]
【61730】Re:指定文字の前までをコピーする kanabun 09/5/30(土) 9:52 発言[未読]
【61732】Re:指定文字の前までをコピーする かみちゃん 09/5/30(土) 10:29 発言[未読]
【61727】Re:指定文字の前までをコピーする ゆみこん 09/5/30(土) 9:41 発言[未読]
【61729】Re:指定文字の前までをコピーする まっちゃん 09/5/30(土) 9:51 回答[未読]
【61731】Re:指定文字の前までをコピーする ゆみこん 09/5/30(土) 10:03 発言[未読]

【61725】指定文字の前までをコピーする
質問  まっちゃん  - 09/5/30(土) 9:06 -

引用なし
パスワード
   こんにちは。

仕事であるデータを抽出したいのですが・・・

例えば、***-**という文字列があって、
ハイフンより前をひろって横のセルにコピーしたいのです。
ハイフンより前が同じ文字数ならいいのですが、文字数は異なります。
また、データ件数は20000〜25000程あって1つ1つ手入力は途方に暮れてしまいます。

これを可能にするマクロってあるのでしょうか?

【61726】Re:指定文字の前までをコピーする
発言  かみちゃん  - 09/5/30(土) 9:15 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>例えば、***-**という文字列があって、
>ハイフンより前をひろって横のセルにコピーしたい

マクロ実行前のサンプルデータと、実行後のサンプルデータを提示していただけませんか?

  A  B  C
1
2
3
4

シートレイアウト提示の際は、投稿欄の右下の「等幅」にチェックをすると、
綺麗に見えます。

【61727】Re:指定文字の前までをコピーする
発言  ゆみこん  - 09/5/30(土) 9:41 -

引用なし
パスワード
   Dim st As String
Dim v As Variant

st = "1234-5678"
v = Split(st, "-")

MsgBox st & " を[-]で区切ります" & vbLf & _
    "[-]より前のデータ " & v(0) & vbLf _
   & "[-]より後ろのデータ " & v(1)
  
の様な事ですか?

【61728】Re:指定文字の前までをコピーする
回答  まっちゃん  - 09/5/30(土) 9:43 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>例えば、***-**という文字列があって、
>>ハイフンより前をひろって横のセルにコピーしたい
>
>マクロ実行前のサンプルデータと、実行後のサンプルデータを提示していただけませんか?
>
>  A  B  C
>1
>2
>3
>4
>
>シートレイアウト提示の際は、投稿欄の右下の「等幅」にチェックをすると、
>綺麗に見えます。


かみちゃん さん
ご返信ありがとうございます。

イメージ的には下記の様な感じです。

   A     B     C
1 KL123-86  KL123   86 
2 HT6547-95  HT6547   95
3 DS56J-4H  DS56J   4H
4
A列が機種-型式、Bが機種のみ、Cが型式のみといった感じです。

マクロが全くわからないのでこんな説明しか出来ません。
すいませんが、よろしくお願いします。

【61729】Re:指定文字の前までをコピーする
回答  まっちゃん  - 09/5/30(土) 9:51 -

引用なし
パスワード
   ▼ゆみこん さん:
>Dim st As String
>Dim v As Variant
>
>st = "1234-5678"
>v = Split(st, "-")
>
>MsgBox st & " を[-]で区切ります" & vbLf & _
>    "[-]より前のデータ " & v(0) & vbLf _
>   & "[-]より後ろのデータ " & v(1)
>  
>の様な事ですか?

ゆみこん さん
ご返信ありがとうございます。

Msgboxではなくて横のセルにコピペしたいんです。

全くの初心者なのでお力を貸して頂けると嬉しいです。
よろしくお願いします。

【61730】Re:指定文字の前までをコピーする
発言  kanabun  - 09/5/30(土) 9:52 -

引用なし
パスワード
   ▼まっちゃん さん:
横からすみません。

>   A     B     C
>1 KL123-86  KL123   86 
>2 HT6547-95  HT6547   95
>3 DS56J-4H  DS56J   4H
>4
>マクロが全くわからないのでこんな説明しか出来ません。

数式でもできそうですけど?

B列: =LEFT(A1,FIND("-",A1)-1)
C列: =MID(A1,FIND("-",A1)+1,LEN(A1))

【61731】Re:指定文字の前までをコピーする
発言  ゆみこん  - 09/5/30(土) 10:03 -

引用なし
パスワード
   A列をB列にコピペして

区切り位置でデータを分割
http://www.becoolusers.com/excel/text-to-columns.html
区切り文字を「その他【-】」にすれば出来そうですが。

そう言う事ではないのかな。

【61732】Re:指定文字の前までをコピーする
発言  かみちゃん  - 09/5/30(土) 10:29 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>イメージ的には下記の様な感じです。
>
>   A     B     C
>1 KL123-86  KL123   86 
>2 HT6547-95  HT6547   95
>3 DS56J-4H  DS56J   4H
>4
>A列が機種-型式、Bが機種のみ、Cが型式のみといった感じです。

ゆみこんさんも提示されていますが、以下のような感じのコードでできると思います。

Sub Sample()
 Dim v As Variant
 Dim c As Range
 Dim rngLast As Range
 
 Set rngLast = Range("A" & Rows.Count).End(xlUp)
 For Each c In Range("A1", rngLast)
  v = Split(c.Value, "-")
  c.Offset(, 1).Resize(, UBound(v) + 1).Value = v
 Next
 MsgBox "処理を終了しました"
End Sub

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