Excel VBA質問箱 IV

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

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


279 / 3841 ページ ←次へ | 前へ→

【76857】Re:Textboxのtextの反転表示について
発言  バウチャー  - 15/3/26(木) 11:14 -

引用なし
パスワード
   >  TextBox1.SelLength = Len(TextBox1.Text)


     ↓


  TextBox1.SelLength = TextBox1.TextLength


でも。
・ツリー全体表示

【76856】Re:Textboxのtextの反転表示について
発言  β  - 15/3/26(木) 11:07 -

引用なし
パスワード
   ▼tanaka さん:

>Textbox1〜5はUserForm_Initializeの時にワークシート上の値を
>割り当てて入力しています。
>UserForm_Initialize終了時にTextbox1が反転しているようにしたいのです。

えっ?

Initializeルーティンの最後に

  TextBox1.SetFocus
  TextBox1.SelStart = 0
  TextBox1.SelLength = Len(TextBox1.Text)

これを記述してもだめだったということですか?
もし、これが記述されているならユーザーフォームが表示された時点で
TextBox1 が選択状態になっているはずですが?
・ツリー全体表示

【76855】Re:Textboxのtextの反転表示について
質問  tanaka  - 15/3/26(木) 9:50 -

引用なし
パスワード
   β さん早々の回答有難う御座います。

質問が足りず申し訳ありません。

Textbox1〜5はUserForm_Initializeの時にワークシート上の値を
割り当てて入力しています。
UserForm_Initialize終了時にTextbox1が反転しているようにしたいのです。

宜しくお願いします。
・ツリー全体表示

【76854】Re:Textboxのtextの反転表示について
発言  β  - 15/3/26(木) 9:26 -

引用なし
パスワード
   ▼tanaka さん:

もしTextBox5 に何らかの値をいれて確定させた後に処理したいなら

Private Sub TextBox5_AfterUpdate()
  TextBox1.SetFocus
  TextBox1.SelStart = 0
  TextBox1.SelLength = Len(TextBox1.Text)
End Sub

TextBox5 に値をいれる、いれないは関係なく、TextBox5を抜けるときに実行したいなら

Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  TextBox1.SetFocus
  TextBox1.SelStart = 0
  TextBox1.SelLength = Len(TextBox1.Text)
End Sub
・ツリー全体表示

【76853】Re:Textboxのtextの反転表示について
発言  β  - 15/3/26(木) 9:21 -

引用なし
パスワード
   ▼tanaka さん:

おはようございます。

ダブルクリックの件、Cancel = True を使います。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  MsgBox Target.Address & " がダブルクリックされました"
  Cancel = True
End Sub

ユーザーフォームの件、TextBox1 の文字列を選択状態にしたいタイミングはいつですか?
TextBox5 にデータを入れ終わった後ですか?
・ツリー全体表示

【76852】Textboxのtextの反転表示について
質問  tanaka  - 15/3/26(木) 9:12 -

引用なし
パスワード
   いつもお世話になります。
2つ質問があります。

1.数字が入力されたセルでWorksheet_BeforeDoubleClickイベントマクロが終了後セルの入力済データが編集中にならないようにするにはどう記入したら良いのでしょうか?

2.UserformのTextbox1〜5にマクロ上でデータを入力した後Textbox1に入力されている文字が反転(編集可能状態)するようにするには?
本を参照して

  TextBox1.SetFocus
  TextBox1.SelStart = 0
  TextBox1.SelLength = Len(TextBox1.Text)

の様に記入してみましたがうまくいきませんでした。
どなたかお教えください。
・ツリー全体表示

【76851】Re:シート1とシート2の内容で一致するも...
発言  β  - 15/3/24(火) 13:36 -

引用なし
パスワード
   ▼あや さん:

こんにちは

アップされたコードにはいくつか(たくさん?)問題があります。

1.領域.Find で、その領域の中を捜すわけですが、Cells と指定すると
  シート全体の領域になりますから、A列以外にあってもマッチします。
2.で、After は、その領域内の検索開始セルですが、領域が Cellsなら
  ActivesCell は当然シート内ですからOKですが、領域をA列にすると
  もし、A列以外が選択されている状態ならエラーになります。
  指定するならA列内のセル(A1 とか)か、あるいは指定しない(こちらを推奨)
  指定がなければ指定領域の先頭のセルから とみなしてくれますので。
3.「大文字の」という条件ですよね。
  ところが、MatchCase:=False 。これは大文字/小文字を区別しないという意味です。
  MatchCase:=True とする必要があります。
4.Findメソッドを実行すると、検索が成功(マッチ)した場合は、そのセルオブジェクトが
  返されますが、失敗(アンマッチ)した場合は「Nothing」になります。
  この「Nothing」になっているオブジェクトは、参照できません。
  参照しようとするとエラーになります。(参照できないので Select もできません)
5.そのFIndメソッドの結果を受ける変数を oRange としていますが、この oRange は
  どこでも参照していません。かわりに Set c = Selection とした結果の c を参照。
  きっと 領域.Find(条件).Select として、その Selectされたセル(Selection)を
  使おうとしたんだと思いますが、検索失敗のことを考えると、領域.Find(条件).Select は
  使ってはいけない構文です。(だから使っていないんですよね)
6.c という セルオブジェクトのプロパティに ColorIndex というものはありません。
  あるのは、Interior (ほかにもたくさんありますが)
  で、ColorIndex は、Interior のプロパティです。
  ですから、c.Interior.ColorIndex です。c.ColorIndex だと、実行時にエラーになります。
7.さらに、その ColorIndex ですが、これは 1〜56。(その他に塗りつぶしなしの xlNone もありますが)
  で、これで指定するなら、ColorIndex = 3 です。
  一方、vbRed はインデックスではなく「色番号」で、実態は 255 です。
  ColorIndex に 255 を与えると、実行時エラーになります。
  vbRed で指定するなら Color = vbRed になります。

これらを加味してたとえば

Private Sub AAA_Click()
  Dim c As Range

  Set c = Columns("A").Find(What:="*AAA*" _
             , LookIn:=xlFormulas _
             , LookAt:=xlWhole _
             , SearchOrder:=xlByRows _
             , SearchDirection:=xlNext _
             , MatchCase:=True _
             , MatchByte:=False _
             , SearchFormat:=False)
 
 
  If c Is Nothing Then
    MsgBox "AAAはありませんでした"
  Else
    c.Interior.Color = vbRed
    MsgBox "AAAがありました"
  End If
 
End Sub
・ツリー全体表示

【76850】Re:連番設定
お礼  gg56  - 15/3/24(火) 12:42 -

引用なし
パスワード
         βさん
・・・自分のセンスの無さと、頭のカタさを実感しています。
アドバイスに従って下記のように書いてみました。

Sub TestB()
Dim i As Integer
  If Cells(1, 1) = "" Then
   Cells(1, 2) = ""
  Else: Cells(1, 2) = 1
  End If
  For i = 2 To 30
   If Cells(i, 1) = "" Then
    Cells(i, 2) = ""
   ElseIf Cells(i, 1) = Cells(i - 1, 1) Then
    Cells(i, 2) = Cells(i - 1, 2) + 1
   Else: Cells(i, 2) = 1
   End If
  Next i
End Sub

でも、やはり別に提示していただいたサンプルコードのほうが
断然スッキリしていますね。


With Range("A2", Range("A" & Rows.Count).End(xlUp)).Offset(, 1)

で For To Next が不要になるのですね。
勉強になりました。ありがとうございます。
・ツリー全体表示

【76849】Re:シート1とシート2の内容で一致するも...
質問  あや  - 15/3/24(火) 10:11 -

引用なし
パスワード
   ▼β さん:
うまくいきました!
有難うございます。

ごめんなさい。別件で質問なのですが、Sheet1のA列に大文字で”AAA”という文字列があるか探し、あればそのセルを赤くし、結果表示もさせる、というようなものを作りたいのですが、下記のものだとエラーが出てしまいます。
解決方法を教えていただけないでしょうか。

Private Sub AAA_Click()
  Dim oRange As Range
  Dim c As Range

  Set oRange = Cells.Find(What:="*AAA*" _
             , After:=ActiveCell _
             , LookIn:=xlFormulas _
             , LookAt:=xlWhole _
             , SearchOrder:=xlByRows _
             , SearchDirection:=xlNext _
             , MatchCase:=False _
             , MatchByte:=False _
             , SearchFormat:=False)
  
 
  Set c = Selection
  c.ColorIndex = vbRed 
  
  If c.Count > 0 Then 
    MsgBox "AAAがありました"
  Else
    MsgBox "AAAはありませんでした"
  End If
  
End Sub

>▼あや さん:
>
>要件を取り違えているかもしれませんが、こういうことですか?
>
>Sub TestRed()
>  Dim c As Range
>  With Application.FindFormat.Interior
>    .PatternColorIndex = xlAutomatic
>    .Color = 255
>    .TintAndShade = 0
>    .PatternTintAndShade = 0
>  End With
> 
>  If ActiveCell.Column <> 1 And ActiveCell.Column <> 2 Then Range("B1").Select
>  
>  Set c = Range("A1", ActiveSheet.UsedRange).Columns("A:B").Find(What:="", After:=ActiveCell, _
>      LookIn:=xlFormulas, LookAt:=xlPart, _
>      SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, _
>      MatchByte:=False, SearchFormat:=True)
>  
>  If c Is Nothing Then
>    MsgBox "重複セルはありません"
>  Else
>    c.Select
>  End If
>
>  Application.FindFormat.Clear
>
> End Sub
・ツリー全体表示

【76848】Re:連番設定
発言  β  - 15/3/24(火) 9:22 -

引用なし
パスワード
   おはようございます。

提示コードは、最初の文字群に番号が振られないというところはありますが
それはさておき。

B1 に =IF(A1="","",1)
B2 に =IF(A2="","",IF(A2=A1,B1+1,1))

この B2 を下にフィルコピー。

これで求める結果がでますね。

この操作をそのままマクロ化して、最後に B列を数式から値変換。
これが1つの方法ですね。

あるいは、上記の数式がやっている判断と処理、これをVBAコード化する手もあります。

Sub Test1()
  
  If Not IsEmpty(Range("A1")) Then
    Range("B1").Value = 1
  Else
    Range("B1").ClearContents
  End If
  
  With Range("A2", Range("A" & Rows.Count).End(xlUp)).Offset(, 1)
    .Formula = "=IF(A2="""","""",IF(A2=A1,B1+1,1))"
    .Value = .Value
  End With
  
End Sub

Sub Test2()
  Dim c As Range
  
  If Not IsEmpty(Range("A1")) Then
    Range("B1").Value = 1
  Else
    Range("B1").ClearContents
  End If
  
  For Each c In Range("A2", Range("A" & Rows.Count).End(xlUp))
    If IsEmpty(c) Then
      c.Offset(, 1).ClearContents
    Else
      If c.Value <> c.Offset(-1).Value Then
        c.Offset(, 1).Value = 1
      Else
        c.Offset(, 1).Value = c.Offset(-1, 1).Value + 1
      End If
    End If
  Next
  
End Sub
・ツリー全体表示

【76847】連番設定
質問  gg56  - 15/3/24(火) 8:20 -

引用なし
パスワード
   (1)A列にデータが入っています。(ex.A,B,C,D,あるいは空欄)
(2)データは同じ値が連続して入力されていたり、ばらばらになって入力されていたりします。

(希望する動作)同じデータが連続している場合にはB列に1から連番を付ける。
連続したデータが途切れたり、変わったりした場合は次のデータのある行から1から新たに連番を付ける。
(よってデータが不連続な場合は番号は1となります。)

(質問)下のコードで動作はしますが、もっとスマートな書き方はないものでしょうか?
  
Sub Test()
Dim i As Integer
  On Error Resume Next
  For i = 1 To 30 '試しに1〜30行目まで。
   If Cells(i, 1) <> Cells(i + 1, 1) Then 'A列当該行とその直下行のデータが異なっていればB列に1を置く。
    Cells(i + 1, 2) = "1"
   End If
   If Cells(i, 2) = "" And (Cells(i - 1, 2) = "1" Or Cells(i - 1, 2) <> "") Then 'B列当該行=空欄でさらにその直上行=1、または空欄以外の場合
    Cells(i, 2) = Cells(i - 1, 2).Value + 1 'B列当該行に直上行の数値に+1した数値を入力する。
   ElseIf Cells(i, 1) = "" Then 'A列当該行=空欄の場合は空欄とする。  
    Cells(i, 2) = "" 
   End If
  Next i
End Sub
・ツリー全体表示

【76846】Re:シート1とシート2の内容で一致するも...
発言  β  - 15/3/23(月) 19:26 -

引用なし
パスワード
   ▼あや さん:

要件を取り違えているかもしれませんが、こういうことですか?

Sub TestRed()
  Dim c As Range
  With Application.FindFormat.Interior
    .PatternColorIndex = xlAutomatic
    .Color = 255
    .TintAndShade = 0
    .PatternTintAndShade = 0
  End With
 
  If ActiveCell.Column <> 1 And ActiveCell.Column <> 2 Then Range("B1").Select
  
  Set c = Range("A1", ActiveSheet.UsedRange).Columns("A:B").Find(What:="", After:=ActiveCell, _
      LookIn:=xlFormulas, LookAt:=xlPart, _
      SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, _
      MatchByte:=False, SearchFormat:=True)
  
  If c Is Nothing Then
    MsgBox "重複セルはありません"
  Else
    c.Select
  End If

  Application.FindFormat.Clear

End Sub
・ツリー全体表示

【76845】Re:シート1とシート2の内容で一致するも...
質問  あや  - 15/3/23(月) 10:42 -

引用なし
パスワード
   ▼β さん:
参考になりました。
有難うございます。

今回実際に使用する際にSheet3のA列と一致するか探しに行くコマンドとSheet3のB列と一致するか探しに行くコマンドを設ける予定なのですが、下記のようにするとA列に赤セルがある場合はショートカットキーで探しに行ってくれますが、B列に赤セルがあっても”重複セルはありません”となってしまいます。
また◆のところをElseIfにしたらエラーがでてきます。
どのようにしたら良いのでしょうか


Sub TestRed()
  Dim c As Range
  With Application.FindFormat.Interior
    .PatternColorIndex = xlAutomatic
    .Color = 255
    .TintAndShade = 0
    .PatternTintAndShade = 0
  End With
  
  If ActiveCell.Column <> 2 Then Range("B1").Select
  Set c = Columns("B").Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, _
      SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _
      MatchByte:=False, SearchFormat:=True)
      
  If ActiveCell.Column <> 1 Then Range("A1").Select '◆
  Set c = Columns("A").Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, _
      SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _
      MatchByte:=False, SearchFormat:=True)
      
  If c Is Nothing Then
    MsgBox "重複セルはありません"
  Else
    c.Select
  End If

  Application.FindFormat.Clear

End Sub

>▼あや さん:
>
>>ここの部分でなにを行っているか教えていただけないでしょうか
>
>この質問を見落としていました。
>シート上の操作で検索をやられたことはあると思いますが、書式検索はやった経験がありますか?
>検索文字列を指定する以外に、オプションで、書式(背景色等々)の検索もできます。
>で、コードは、この機能を使っています。つまり、文字を探しに行くのではなく背景色の赤を捜しに行きます。
>
>で、なぜエラーかといいますと(想像ですけど)元々 B 列だったのをそちらで(なぜか)C列にかえてますね。
>
>で、検索領域が C列で、そのなかで、どこから探しに行くかを ActiveCell にしています。
>この、どこからさがすか、その起点セルは検索領域の中にないとエラーになります。
>なので、コードの上のほうで、ActiveCellが B列ではなかったらB1 に飛ばしています。
>
>なので、検索起点が検索領域にないよというエラーになっているものと思います。
>
>今回、赤は1つしかない、とうことは次へというものがない。
>ならば、このどこからという起点を記述しないという方法もあります。
>つまり、After:=ActiveCell これをカット。
>そうすれば、常に、検索領域の最初のセルから検索を行います。
>
>というより、この Ctrl/j の目的は、重複があったね、それはどこだったんだろうと、
>そういったことですよね。
>
>であれば、このTestRedは廃止して、CommandButton1ルーティンの最後に、そのセルに飛ばすようにしてはいかが?
>
>MsgBox "重複があります:" & Dup
>
>この後に
>
>Application.GoTo Red
>
>こうして試してみてください。
・ツリー全体表示

【76843】Re:シート1とシート2の内容で一致するも...
発言  β  - 15/3/19(木) 20:14 -

引用なし
パスワード
   ▼あや さん:

>ここの部分でなにを行っているか教えていただけないでしょうか

この質問を見落としていました。
シート上の操作で検索をやられたことはあると思いますが、書式検索はやった経験がありますか?
検索文字列を指定する以外に、オプションで、書式(背景色等々)の検索もできます。
で、コードは、この機能を使っています。つまり、文字を探しに行くのではなく背景色の赤を捜しに行きます。

で、なぜエラーかといいますと(想像ですけど)元々 B 列だったのをそちらで(なぜか)C列にかえてますね。

で、検索領域が C列で、そのなかで、どこから探しに行くかを ActiveCell にしています。
この、どこからさがすか、その起点セルは検索領域の中にないとエラーになります。
なので、コードの上のほうで、ActiveCellが B列ではなかったらB1 に飛ばしています。

なので、検索起点が検索領域にないよというエラーになっているものと思います。

今回、赤は1つしかない、とうことは次へというものがない。
ならば、このどこからという起点を記述しないという方法もあります。
つまり、After:=ActiveCell これをカット。
そうすれば、常に、検索領域の最初のセルから検索を行います。

というより、この Ctrl/j の目的は、重複があったね、それはどこだったんだろうと、
そういったことですよね。

であれば、このTestRedは廃止して、CommandButton1ルーティンの最後に、そのセルに飛ばすようにしてはいかが?

MsgBox "重複があります:" & Dup

この後に

Application.GoTo Red

こうして試してみてください。
・ツリー全体表示

【76842】Re:シート1とシート2の内容で一致するも...
お礼  あや  - 15/3/19(木) 20:11 -

引用なし
パスワード
   ▼β さん:
ごめんなさい!
少しいじったら上手くいきました!
有難うございます。

列を変更したときもできました
勉強不足過ぎました
大変ご迷惑おかけしました・・・


>▼β さん:
>>まず、Sheet3 を表示して操作してますよね?
>>で、その前提で。
>表示しています
>
>>私がアップしたものは Columns("B").Find でしたよね。
>>
>>
>>> Set c = Columns("C").Find(What:="", After:=ActiveCell,
>>
>>なぜ、C列なんですか?
>>C列には色は塗っていませんが?
>ごめんなさい。プログラムを理解したくどこを変更するとどう変わるのか試していたやつを送っていました
>
>追加追加でごめんなさい
>因みに赤セルをB列以外に設定した場合このプログラムだとどこを変更しないといけないのでしょうか
>'◆をつけたところ以外に変更点はありますか(C列に変更してみてます)
>Sub Test()
>  Application.MacroOptions Macro:="TestRed", ShortcutKey:="z"
>End Sub
>
>Sub TestRed()
>  Dim c As Range
>  With Application.FindFormat.Interior
>    .PatternColorIndex = xlAutomatic
>    .Color = 255
>    .TintAndShade = 0
>    .PatternTintAndShade = 0
>  End With
>  If ActiveCell.Column <> 2 Then Range("C1").Select '◆
>  Set c = Columns("C").Find(What:="", After:=ActiveCell, '◆ LookIn:=xlFormulas, LookAt:=xlPart, _
>      SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _
>      MatchByte:=False, SearchFormat:=True)
>  If c Is Nothing Then
>    MsgBox "重複セルはありません"
>  Else
>    c.Select
>  End If
> 
>  Application.FindFormat.Clear
> 
>End Sub
>
>
>>▼あや さん:
>>
>>>最初のまた最後のだけ結果表示してくれるようになりました
>>
>>よかったです。
>>
>>>ところがCtrl+Jをするとエラーが出てきてしまいます
>>
>>まず、Sheet3 を表示して操作してますよね?
>>で、その前提で。
>>
>>私がアップしたものは Columns("B").Find でしたよね。
>>
>>
>>> Set c = Columns("C").Find(What:="", After:=ActiveCell,
>>
>>なぜ、C列なんですか?
>>C列には色は塗っていませんが?
・ツリー全体表示

【76841】Re:シート1とシート2の内容で一致するも...
質問  あや  - 15/3/19(木) 20:04 -

引用なし
パスワード
   ▼β さん:
>まず、Sheet3 を表示して操作してますよね?
>で、その前提で。
表示しています

>私がアップしたものは Columns("B").Find でしたよね。
>
>
>> Set c = Columns("C").Find(What:="", After:=ActiveCell,
>
>なぜ、C列なんですか?
>C列には色は塗っていませんが?
ごめんなさい。プログラムを理解したくどこを変更するとどう変わるのか試していたやつを送っていました

追加追加でごめんなさい
因みに赤セルをB列以外に設定した場合このプログラムだとどこを変更しないといけないのでしょうか
'◆をつけたところ以外に変更点はありますか(C列に変更してみてます)
Sub Test()
  Application.MacroOptions Macro:="TestRed", ShortcutKey:="z"
End Sub

Sub TestRed()
  Dim c As Range
  With Application.FindFormat.Interior
    .PatternColorIndex = xlAutomatic
    .Color = 255
    .TintAndShade = 0
    .PatternTintAndShade = 0
  End With
  If ActiveCell.Column <> 2 Then Range("C1").Select '◆
  Set c = Columns("C").Find(What:="", After:=ActiveCell, '◆ LookIn:=xlFormulas, LookAt:=xlPart, _
      SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _
      MatchByte:=False, SearchFormat:=True)
  If c Is Nothing Then
    MsgBox "重複セルはありません"
  Else
    c.Select
  End If
 
  Application.FindFormat.Clear
 
End Sub


>▼あや さん:
>
>>最初のまた最後のだけ結果表示してくれるようになりました
>
>よかったです。
>
>>ところがCtrl+Jをするとエラーが出てきてしまいます
>
>まず、Sheet3 を表示して操作してますよね?
>で、その前提で。
>
>私がアップしたものは Columns("B").Find でしたよね。
>
>
>> Set c = Columns("C").Find(What:="", After:=ActiveCell,
>
>なぜ、C列なんですか?
>C列には色は塗っていませんが?
・ツリー全体表示

【76840】Re:シート1とシート2の内容で一致するも...
発言  β  - 15/3/19(木) 19:50 -

引用なし
パスワード
   ▼あや さん:

>最初のまた最後のだけ結果表示してくれるようになりました

よかったです。

>ところがCtrl+Jをするとエラーが出てきてしまいます

まず、Sheet3 を表示して操作してますよね?
で、その前提で。

私がアップしたものは Columns("B").Find でしたよね。


> Set c = Columns("C").Find(What:="", After:=ActiveCell,

なぜ、C列なんですか?
C列には色は塗っていませんが?
・ツリー全体表示

【76839】Re:シート1とシート2の内容で一致するも...
質問  あや  - 15/3/19(木) 19:33 -

引用なし
パスワード
   ▼β さん:
最初のまた最後のだけ結果表示してくれるようになりました
本当にありがとうございます

ところがCtrl+Jをするとエラーが出てきてしまいます
デバックをすると
Set c = Columns("C").Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, _
      SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _
      MatchByte:=False, SearchFormat:=True)
この部分が選択されます
ここの部分でなにを行っているか教えていただけないでしょうか

>▼あや さん:
>
>1番目が最初の重複のみ表示、2番目が最後の重複のみ表示です。
>
>Private Sub CommandButton1_Click()
>  Dim dic As Object
>  Dim i As Long
>  Dim v As Variant
>  Dim c As Range
>  Dim Red As Range
>  Dim Dup As String
>  
>  Set dic = CreateObject("Scripting.Dictionary")
>
>   With Sheets("Sheet2")
>    For Each c In .Range("A1", .Range("A" & Rows.Count).End(xlUp))
>      dic(c.Value) = c.Offset(, 1).Value
>    Next
>  End With
>
>  With Sheets("Sheet3")
>    .Columns("B").Interior.ColorIndex = xlNone
>    For Each c In .Range("B1", .Range("B" & Rows.Count).End(xlUp))
>      If dic.exists(c.Value) Then
>        If Red Is Nothing Then
>          Set Red = c
>          Dup = c.Value
>          'もし地域を表示するなら
>'          Dup = dic(c.Value)
>        End If
>      End If
>    Next
>    .Select
>  End With
> 
>   If Not Red Is Nothing Then
>    Red.Interior.Color = vbRed
>    MsgBox "重複があります:" & Dup
>  Else
>    MsgBox "重複はありませんでした"
>  End If
>
>End Sub
>
>
>Private Sub CommandButton1_Click()
>  Dim dic As Object
>  Dim i As Long
>  Dim v As Variant
>  Dim c As Range
>  Dim Red As Range
>  Dim Dup As String
>  
>  Set dic = CreateObject("Scripting.Dictionary")
>
>   With Sheets("Sheet2")
>    For Each c In .Range("A1", .Range("A" & Rows.Count).End(xlUp))
>      dic(c.Value) = c.Offset(, 1).Value
>    Next
>  End With
>
>  With Sheets("Sheet3")
>    .Columns("B").Interior.ColorIndex = xlNone
>    For Each c In .Range("B1", .Range("B" & Rows.Count).End(xlUp))
>      If dic.exists(c.Value) Then
>        Set Red = c
>        Dup = c.Value
>        'もし地域を表示するなら
>'        Dup = dic(c.Value)
>      End If
>    Next
>    .Select
>  End With
> 
>   If Not Red Is Nothing Then
>    Red.Interior.Color = vbRed
>    MsgBox "重複があります:" & Dup
>  Else
>    MsgBox "重複はありませんでした"
>  End If
>
> End Sub
・ツリー全体表示

【76838】Re:シート1とシート2の内容で一致するも...
質問  あや  - 15/3/19(木) 19:15 -

引用なし
パスワード
   ▼β さん:
有難うございます

>>あと、複数表示していた時なのですが、セルは複数赤くなっているのですが、ショートカットキーを使って赤くなっているセルの二つ目以降のところに飛ぶにはどうしたらよいのでしょうか。
>>Ctrl+Jを何回押しても最初のセルにしか飛んでくれないので・・・
>
>説明しませんでしたが、B列のアクティブセルの「次から」検索しています。
>で、Ctrl/j を押したときに B列以外が選択されていたら B1 にもっていって
>そこから検索します。
>でも、検索されたセルを選択状態にしますので、そのまま Ctrl/j で、次の赤セルに
>とぶはずですが?
>もし、検索後、B列以外を選択してから Ctrl/j をおせば、はじめからになりますが。
ということは一致箇所があるか検索するボタンを押して、一致箇所があれば、その時点で一致箇所のセルに飛ぶということでしょうか?

一致箇所を探すボタンを押す→OK→Sheet3のどこかのセルを選択→Ctrl+J
をしないと赤のセルのところに飛んでくれません。
また、最初の赤セルにCtrl+Jで飛んでくれるのですが、そのままCtrl+Jを何回押しても最初の赤セルしか選択してくれません

>▼あや さん:
>
>>複数結果が一致してしまっても、結果自体の表示また、セルを赤くすることを最初に一致したものだけに行う、ということをしたいです。
>>また可能であれば最後に一致したものだけ表示、セルを赤くする、ということも教えていただきたいです。
>
>はい。後ほど、最初のもののみバージョンと最後のもののみバージョンをアップします。
>ということは、もう TestRedは不要ということですね?
>赤セルは1つしかないわけですから。
>
>>あと、複数表示していた時なのですが、セルは複数赤くなっているのですが、ショートカットキーを使って赤くなっているセルの二つ目以降のところに飛ぶにはどうしたらよいのでしょうか。
>>Ctrl+Jを何回押しても最初のセルにしか飛んでくれないので・・・
>
>説明しませんでしたが、B列のアクティブセルの「次から」検索しています。
>で、Ctrl/j を押したときに B列以外が選択されていたら B1 にもっていって
>そこから検索します。
>でも、検索されたセルを選択状態にしますので、そのまま Ctrl/j で、次の赤セルに
>とぶはずですが?
>もし、検索後、B列以外を選択してから Ctrl/j をおせば、はじめからになりますが。
・ツリー全体表示

【76837】Re:シート1とシート2の内容で一致するも...
発言  β  - 15/3/19(木) 19:07 -

引用なし
パスワード
   ▼あや さん:

1番目が最初の重複のみ表示、2番目が最後の重複のみ表示です。

Private Sub CommandButton1_Click()
  Dim dic As Object
  Dim i As Long
  Dim v As Variant
  Dim c As Range
  Dim Red As Range
  Dim Dup As String
  
  Set dic = CreateObject("Scripting.Dictionary")

   With Sheets("Sheet2")
    For Each c In .Range("A1", .Range("A" & Rows.Count).End(xlUp))
      dic(c.Value) = c.Offset(, 1).Value
    Next
  End With

  With Sheets("Sheet3")
    .Columns("B").Interior.ColorIndex = xlNone
    For Each c In .Range("B1", .Range("B" & Rows.Count).End(xlUp))
      If dic.exists(c.Value) Then
        If Red Is Nothing Then
          Set Red = c
          Dup = c.Value
          'もし地域を表示するなら
'          Dup = dic(c.Value)
        End If
      End If
    Next
    .Select
  End With
 
   If Not Red Is Nothing Then
    Red.Interior.Color = vbRed
    MsgBox "重複があります:" & Dup
  Else
    MsgBox "重複はありませんでした"
  End If

End Sub


Private Sub CommandButton1_Click()
  Dim dic As Object
  Dim i As Long
  Dim v As Variant
  Dim c As Range
  Dim Red As Range
  Dim Dup As String
  
  Set dic = CreateObject("Scripting.Dictionary")

   With Sheets("Sheet2")
    For Each c In .Range("A1", .Range("A" & Rows.Count).End(xlUp))
      dic(c.Value) = c.Offset(, 1).Value
    Next
  End With

  With Sheets("Sheet3")
    .Columns("B").Interior.ColorIndex = xlNone
    For Each c In .Range("B1", .Range("B" & Rows.Count).End(xlUp))
      If dic.exists(c.Value) Then
        Set Red = c
        Dup = c.Value
        'もし地域を表示するなら
'        Dup = dic(c.Value)
      End If
    Next
    .Select
  End With
 
   If Not Red Is Nothing Then
    Red.Interior.Color = vbRed
    MsgBox "重複があります:" & Dup
  Else
    MsgBox "重複はありませんでした"
  End If

End Sub
・ツリー全体表示

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