Excel VBA質問箱 IV

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

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


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

【64668】指定する複数の値を抜き出したいのですが はるまき 10/3/3(水) 19:33 質問[未読]
【64669】Re:指定する複数の値を抜き出したいのですが Yuki 10/3/4(木) 7:39 発言[未読]
【64670】Re:指定する複数の値を抜き出したいのですが はるまき 10/3/4(木) 17:42 質問[未読]
【64673】Re:指定する複数の値を抜き出したいのですが Yuki 10/3/5(金) 7:08 発言[未読]
【64681】Re:指定する複数の値を抜き出したいのですが はるまき 10/3/7(日) 20:37 質問[未読]
【64686】Re:指定する複数の値を抜き出したいのですが Yuki 10/3/8(月) 10:09 発言[未読]
【64702】Re:指定する複数の値を抜き出したいのですが はるまき 10/3/9(火) 12:29 お礼[未読]

【64668】指定する複数の値を抜き出したいのですが
質問  はるまき  - 10/3/3(水) 19:33 -

引用なし
パスワード
   例えば、下のようにA列に縦に並んだデータのシートが数十枚あります。

その各シートのデータの先頭の値と、
指定する値(複数あります)に当てはまったデータだけを新しいシートに抜き出す方法はありますでしょうか?


A列に縦に続くデータ

0
1
2
3
4
5




上データより

<指定する複数条件の値〉
0123           ○全て該当するので抜き出す    →0123      
012345         ○全て該当するので抜き出す    →012345
123456         ×全て該当しないので抜き出さない →なし     

(文字列モードで表示できる方法があれば嬉しいです)

【64669】Re:指定する複数の値を抜き出したいので...
発言  Yuki  - 10/3/4(木) 7:39 -

引用なし
パスワード
   ▼はるまき さん:
>例えば、下のようにA列に縦に並んだデータのシートが数十枚あります。
>
>その各シートのデータの先頭の値と、
>指定する値(複数あります)に当てはまったデータだけを新しいシートに抜き出す方法はありますでしょうか?
>
新しいシートを追加していますが実行する度に追加しますので
一番左 Worksheets(1) を 最初から手動で追加してそれを参照すれば
宜しいかと思います

Option Explicit
Sub TEST()
  Dim i  As Long
  Dim j  As Long
  Dim v1 As Variant
  Dim s  As String
  Dim fd As String
  Dim sht As Worksheet
  
  fd = "0123"   ' 検索値

  ' 新しいシートの追加1番前へ 毎回追加される
  Set sht = Worksheets.Add(Before:=Worksheets(1))
    ' 手動で追加してある場合は
'  Set sht = Worksheets(1)
'  sht.Cells.ClearContents
  ' 2番目のシートから検索
  For i = 2 To Worksheets.Count
    With Worksheets(i)
      v1 = .Range("A1").CurrentRegion.Resize(, 1).Value
      v1 = Application.Transpose(v1)
      s = Join(v1, "")
      If Len(fd) <= Len(s) Then s = Left(s, Len(fd))
      If StrComp(fd, s, vbTextCompare) = 0 Then
        ' あったら新しいシートに
        j = j + 1
        sht.Cells(j, 1) = .Name
        sht.Cells(j, 2) = s
      End If
    End With
  Next
End Sub

【64670】Re:指定する複数の値を抜き出したいので...
質問  はるまき  - 10/3/4(木) 17:42 -

引用なし
パスワード
   Yuki さん:
ご親切にありがとうございます。


0が続くデータがあると
 
0
0
0
・ 


→0

と1つだけ表示されてしまうのですが、

→000

と表示させる方法はありますでしょうか。

【64673】Re:指定する複数の値を抜き出したいので...
発言  Yuki  - 10/3/5(金) 7:08 -

引用なし
パスワード
   ▼はるまき さん:
>と1つだけ表示されてしまうのですが、
>→000
>と表示させる方法はありますでしょうか。

セルの書式を文字列にすれば良いでしょう

>'  sht.Cells.ClearContents
  sht.Columns("A:B").NumberFormatLocal = "@" 'この1行を追加
>  ' 2番目のシートから検索
>  For i = 2 To Worksheets.Count

【64681】Re:指定する複数の値を抜き出したいので...
質問  はるまき  - 10/3/7(日) 20:37 -

引用なし
パスワード
   Yuki さん:
ありがとうございます。

〉fd = "0123"   ' 検索値

は複数入力することはできますか?
初心者なもので、度々すみません。

【64686】Re:指定する複数の値を抜き出したいので...
発言  Yuki  - 10/3/8(月) 10:09 -

引用なし
パスワード
   ▼はるまき さん:
> fd = "0123"   ' 検索値
> は複数入力することはできますか?

Sub TEST()
  Dim i  As Long
  Dim j  As Long
  Dim k  As Long
  Dim v1 As Variant
  Dim s1 As String
  Dim s2 As String
  Dim fd As Variant
  Dim sht As Worksheet
  
  fd = Array("000", "1234", "012", "013")
  ' 新しいシートの追加1番前へ
  Set sht = Worksheets.Add(Before:=Worksheets(1))
  ' 手動で追加してある場合は
'  Set sht = Worksheets(1)
'  sht.Cells.ClearContents
  sht.Columns("A:B").NumberFormatLocal = "@"
  ' 2番目のシートから検索
  For i = 2 To Worksheets.Count
    With Worksheets(i)
      v1 = .Range("A1").CurrentRegion.Resize(, 1).Value
      v1 = Application.Transpose(v1)
      s1 = Join(v1, "")
      For k = 0 To UBound(fd)
        If Len(fd(k)) <= Len(s1) Then s2 = Left(s1, Len(fd(k)))
        If StrComp(fd(k), s2, vbTextCompare) = 0 Then
          ' あったら新しいシートに
          j = j + 1
          sht.Cells(j, 1) = .Name
          sht.Cells(j, 2) = s2
          Exit For '123,1234と言うような検索値が無い場合は
        End If
      Next
    End With
  Next
End Sub

【64702】Re:指定する複数の値を抜き出したいので...
お礼  はるまき  - 10/3/9(火) 12:29 -

引用なし
パスワード
   ▼Yuki さん:
ご親切にありがとうございます。
本当に助かりましたm(_ _)m

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