Excel VBA質問箱 IV

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

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


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

【28826】文字列の取得 ZMAN 05/9/15(木) 19:14 質問[未読]
【28828】Re:文字列の取得 だるま 05/9/15(木) 19:56 回答[未読]
【28829】Re:文字列の取得 Hirofumi 05/9/15(木) 20:03 回答[未読]
【28830】Re:文字列の取得 ponpon 05/9/15(木) 20:07 発言[未読]
【28845】Re:文字列の取得 ZMAN 05/9/16(金) 8:30 お礼[未読]

【28826】文字列の取得
質問  ZMAN  - 05/9/15(木) 19:14 -

引用なし
パスワード
   はじめまして、VBA始めたばかりの初心者です
Aセル内の任意文字列の”*”から左側だけの文字列を取得し
B列にコピーしたいのですが(1000行繰り返し)
例    A         B
    商品コード      商品コードB
1   AAAAA*BBBBB     AAAAA
2   ZZ*99999999     ZZ
3   NNNNNN*33      NNNNNN
4   XXXX*1       XXXX
5   AAAAAAAAAAAAA*99  AAAAAAAAAAAAA
6   AZXPOQ*XY      AZXPOQ
7   12345*66666     12345


1000END*END       END

宜しくお願いします。

【28828】Re:文字列の取得
回答  だるま WEB  - 05/9/15(木) 19:56 -

引用なし
パスワード
   こんな感じでいかがでしょうか。^d^

Sub test()
  Dim myRange As Range
  Dim myCell As Range
  Dim V As Variant
  
  Set myRange = Range("A1", Range("A65536").End(xlUp))
  
  For Each myCell In myRange.Cells
    V = Split(myCell.Value, "*")
    If UBound(V) >= 1 Then
      myCell.Offset(, 1).Value = V(0)
    End If
  Next
  
  Set myCell = Nothing
  Set myRange = Nothing
End Sub

【28829】Re:文字列の取得
回答  Hirofumi  - 05/9/15(木) 20:03 -

引用なし
パスワード
   こんなのでも?

Option Explicit

Public Sub Sample()

  Dim i As Long
  Dim lngRows As Long
  Dim vntData As Variant
  Dim lngPos As Long
  Dim strProm As String
  
  'データの有るシートにA1を基準とする
  With ActiveSheet.Cells(1, "A")
    'データ行数を取得
    lngRows = .Offset(65536 - .Row).End(xlUp).Row - .Row
    If lngRows <= 0 Then
      strProm = "データが有りません"
      GoTo Wayout
    End If
    'データを配列に取得
    vntData = .Offset(1).Resize(lngRows).Value
    'データ全てに就いて繰り返し
    For i = 1 To lngRows
      '"*"の位置を取得(全角、半角を問わずの場合)
      lngPos = InStr(1, vntData(i, 1), "*", vbTextCompare)
      '"*"の位置を取得("*"と同じ物のみを指定する場合、)
'      lngPos = InStr(1, vntData(i, 1), "*", vbBinaryCompare)
      '"*"が有った場合
      If lngPos > 0 Then
        '"*"因り、左部分を取得
        vntData(i, 1) = Left(vntData(i, 1), lngPos - 1)
      End If
    Next i
    '結果を隣りの列に出力
    .Offset(1, 1).Resize(lngRows).Value = vntData
  End With
  
  strProm = "処理が完了しました"
  
Wayout:
  
  Beep
  MsgBox strProm
    
End Sub

【28830】Re:文字列の取得
発言  ponpon  - 05/9/15(木) 20:07 -

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

関数ですが

B1列に「=IF(SEARCH("~*",A1)>1,LEFT(A1,SEARCH("~*",A1)-1),"")」と入力し、
右下黒十字をダブルクリックでは、いかがでしょう?

【28845】Re:文字列の取得
お礼  ZMAN  - 05/9/16(金) 8:30 -

引用なし
パスワード
   みなさんありがとうございました
うまくできました。
これからも勉強していきたいので、宜しくお願いします。

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