Excel VBA質問箱 IV

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

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


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

【65091】シート別の文字重複に印をつけたい kasa 10/4/15(木) 11:07 質問[未読]
【65092】Re:シート別の文字重複に印をつけたい Jaka 10/4/15(木) 12:48 発言[未読]
【65094】Re:シート別の文字重複に印をつけたい kasa 10/4/15(木) 14:25 質問[未読]
【65095】Re:シート別の文字重複に印をつけたい Jaka 10/4/15(木) 17:04 発言[未読]
【65102】Re:シート別の文字重複に印をつけたい kasa 10/4/16(金) 16:15 お礼[未読]

【65091】シート別の文字重複に印をつけたい
質問  kasa E-MAIL  - 10/4/15(木) 11:07 -

引用なし
パスワード
   VBA初心者です。
以下の条件でマクロを組みたいと思っています。
検索で探してみましたがよくわからなかったので
質問させてください。

シート1にある文字(書名)が
シート2で重複(書名)していれば
シート1のセルに印をつけるというプログラミングを
教えていただけないでしょうか。

コード(数字)で重複した場合はわかったのですが
文字となるとよくわからなくて・・。
ちなみにコード(数字)、以下のようにプログラミングしました。

Sub 変換1()

  Dim i, j, endofrow, endofcol As Integer
 
  Set WS2 = ActiveSheet.Next
 
  end1 = ActiveSheet.UsedRange.Rows.Count
  end2 = WS2.UsedRange.Rows.Count
 
  For i = 2 To end1
   For j = 2 To end2
    
    a$ = Mid$(ActiveSheet.Cells(i, 1).Value, 1, 6)
    b$ = Mid$(WS2.Cells(j, 1).Value, 7, 6)
    
      If a$ = b$ Then
        ' ActiveSheet.Cells(j, i).Interior.ColorIndex = 3
        ActiveSheet.Cells(i, 3) = "*"
      
      End If
    Next j
  Next i
  
End Sub


よろしくお願いいたします。

【65092】Re:シート別の文字重複に印をつけたい
発言  Jaka  - 10/4/15(木) 12:48 -

引用なし
パスワード
   >コード(数字)で重複した場合はわかったのですが
>文字となるとよくわからなくて・・。
どのように解らないのかわかりません。

>    a$ = Mid$(ActiveSheet.Cells(i, 1).Value, 1, 6)
>    b$ = Mid$(WS2.Cells(j, 1).Value, 7, 6)
上記でやっていることを把握しているのでしょうか?

また、

>  end1 = ActiveSheet.UsedRange.Rows.Count
>  end2 = WS2.UsedRange.Rows.Count
これだと、

>  For i = 2 To end1
>   For j = 2 To end2
と、やった場合、不具合が出るような気がしますが、
UsedRange.Rows.Count
で、良いのでしょうか?

例えば、新規シートで、下記コードを確認してください。

sub aaaa()
Range("E11:H15").Value = 111
MsgBox "ActiveSheet.UsedRange.Rows.Count" & vbLf & _
    ActiveSheet.UsedRange.Rows.Count
End sub

【65094】Re:シート別の文字重複に印をつけたい
質問  kasa E-MAIL  - 10/4/15(木) 14:25 -

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

確かに、VBAドリル見ながらですので
自分もよく把握せずに作ってると思います・・。

コードの確認はよくわからなかったのですが
(すみません)
以下で作成してみたのですが不具合があるようででダメでした。


Public Sub daburikakunin()
Const SHEET1 = "シート1"
  Const SHEET2 = "シート2"

End Sub
Sub CheckData()
  Dim srcWS As Worksheet
  Set srcWS = Worksheets(SHEET1)

  Dim dstWS As Worksheet
  Set dstWS = Worksheets(SHEET2)

  Dim i As Long
  Dim lastRow As Long
  Dim r As Range, f As Range
  
  lastRow = dstWS.Range("A" & Rows.Count).End(xlUp).Row
  For i = 1 To lastRow
    If dstWS.Cells(i, "A").Value <> "" Then
      Set r = srcWS.Columns(1).Find(what:=dstWS.Cells(i, "A").Value, lookat:=xlWhole)
      If Not r Is Nothing Then
        dstWS.Cells(i, "B").Value = r.AddressLocal(1, 6536)
        Set f = r
        Do While True
          Set r = srcWS.Columns(1).FindNext(r)
          If r.AddressLocal = f.AddressLocal Then Exit Do
          dstWS.Cells(i, "B").Value = dstWS.Cells(i, "B").Value & "/" & r.AddressLocal(1, 6536)
        Loop
      End If
    End If
  Next
End Sub

【65095】Re:シート別の文字重複に印をつけたい
発言  Jaka  - 10/4/15(木) 17:04 -

引用なし
パスワード
   While って使ったことが無いので、Untilに変えたけど。
こんな感じなのかな?
それとFindって、読みで検索するようなのか、しているのか解らないところがあるから、
引数は、省略しない方がいいと思います。
かつ、検索文字は、変数に入れた方がいいのかも。


  lastRow = dstWS.Range("A" & Rows.Count).End(xlUp).Row
  For i = 1 To lastRow
    st = dstWS.Cells(i, "A").Value
    If st <> "" Then
      Set r = srcWS.Columns(1).Find(what:=st, lookat:=xlWhole)
      If Not r Is Nothing Then
        SaveAd = r.address
        Do
          dstWS.Cells(i, "B").Value = dstWS.Cells(i, "B").Value & "/" & r.AddressLocal(1, 6536)
          Set r = srcWS.Columns(1).FindNext(r)
        Loop until SaveAd = r.Address
      End If
    End If
  Next

【65102】Re:シート別の文字重複に印をつけたい
お礼  kasa E-MAIL  - 10/4/16(金) 16:15 -

引用なし
パスワード
   Jakaさん

ありがとうございました。

>引数は、省略しない方がいいと思います。
>かつ、検索文字は、変数に入れた方がいいのかも。

というアドバイス、その通りですね。
うまくいきました!

正確なアドバイスありがとうございました。

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