Excel VBA質問箱 IV

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

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


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

【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
・ツリー全体表示

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

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

>複数結果が一致してしまっても、結果自体の表示また、セルを赤くすることを最初に一致したものだけに行う、ということをしたいです。
>また可能であれば最後に一致したものだけ表示、セルを赤くする、ということも教えていただきたいです。

はい。後ほど、最初のもののみバージョンと最後のもののみバージョンをアップします。
ということは、もう TestRedは不要ということですね?
赤セルは1つしかないわけですから。

>あと、複数表示していた時なのですが、セルは複数赤くなっているのですが、ショートカットキーを使って赤くなっているセルの二つ目以降のところに飛ぶにはどうしたらよいのでしょうか。
>Ctrl+Jを何回押しても最初のセルにしか飛んでくれないので・・・

説明しませんでしたが、B列のアクティブセルの「次から」検索しています。
で、Ctrl/j を押したときに B列以外が選択されていたら B1 にもっていって
そこから検索します。
でも、検索されたセルを選択状態にしますので、そのまま Ctrl/j で、次の赤セルに
とぶはずですが?
もし、検索後、B列以外を選択してから Ctrl/j をおせば、はじめからになりますが。
・ツリー全体表示

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

引用なし
パスワード
   ▼β さん:
そうです!
説明不足でした。失礼いたしました。

複数結果が一致してしまっても、結果自体の表示また、セルを赤くすることを最初に一致したものだけに行う、ということをしたいです。
また可能であれば最後に一致したものだけ表示、セルを赤くする、ということも教えていただきたいです。

あと、複数表示していた時なのですが、セルは複数赤くなっているのですが、ショートカットキーを使って赤くなっているセルの二つ目以降のところに飛ぶにはどうしたらよいのでしょうか。
Ctrl+Jを何回押しても最初のセルにしか飛んでくれないので・・・

>▼あや さん:
>
>重複の件ですが、こうなるべきだというロジックになっています。
>つまり、Sheet3 に 22 や 4444 が、もっともっとあった場合、
>当初は、そのすべてを表示していたと思いますが、現在は、最初の22、最初の4444 に限定して
>メッセージをだす、で、だす際には、その地域である いいいい や ええええ で出す。
>(いいかえれえば、地域で1つしか出さないようにしています)
>
>これを、いいいい だけにしたいということですか?
>つまり、以下の地域に・・・で重複地域をすべて出すのではなく、
>いいいい 等の地域に・・・と出して、他に何が重複していたか、
>それは目で見て調べてくださいと、こんな処理でいいのですか?
・ツリー全体表示

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

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

重複の件ですが、こうなるべきだというロジックになっています。
つまり、Sheet3 に 22 や 4444 が、もっともっとあった場合、
当初は、そのすべてを表示していたと思いますが、現在は、最初の22、最初の4444 に限定して
メッセージをだす、で、だす際には、その地域である いいいい や ええええ で出す。
(いいかえれえば、地域で1つしか出さないようにしています)

これを、いいいい だけにしたいということですか?
つまり、以下の地域に・・・で重複地域をすべて出すのではなく、
いいいい 等の地域に・・・と出して、他に何が重複していたか、
それは目で見て調べてくださいと、こんな処理でいいのですか?
・ツリー全体表示

【76833】Re:ExcelVBAで出来ること
お礼  hihiroro  - 15/3/19(木) 16:58 -

引用なし
パスワード
   ▼佳 さん:
回答いただきありがとうございます。
Access 魅力的です。
本来なら、Accessで作れるといいのですが
もっと勉強したいと思います。
・ツリー全体表示

【76832】Re:ExcelVBAで出来ること
お礼  hihiroro  - 15/3/19(木) 16:55 -

引用なし
パスワード
   ▼β さん:
>▼hihiroro さん:
回答いただきありがとうございます。
確かに気が遠くなりそうですね。。
エクセルでもそれに近ずくことはできるということですね。
すっきりしました。ありがとうございました。
・ツリー全体表示

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

引用なし
パスワード
   ▼β さん:
ごめんなさい。結果表示は以下のように出ます。

*結果表示
以下重複があります
いいいい

ええええ


>▼あや さん:
>
>>そのまま使わせていただきましたが、複数結果表示されてしまいます・・・
>
>えっ??
>そうですか?
>
>う〜ん・・・悩んでみますが、
>
>Sheet2 これこれのデータがある
>Sheet3には これこれのデータがある
>本来は、こうなるべきなのに、こうなってしまった。
>
>もちろん、重複に関するところだけでいいので
>具体的な文字列として教えてもらえませんか?
・ツリー全体表示

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

引用なし
パスワード
   ▼β さん:
具体的な文字列、というのはSheet2とSheet3に何を記入して試しているのか、ということで良いでしょうか。
現在テスト形式でしているので、入れている値は適当です・・・

*Sheet2
A列    B列
1111    ああああ
22     いいいい

333     ううう
4444     ええええ

*Sheet3
B列
22
7777
44
4444
3

*結果表示
以下重複があります
22

4444

というような感じで出てしまいます。

>▼あや さん:
>
>>そのまま使わせていただきましたが、複数結果表示されてしまいます・・・
>
>えっ??
>そうですか?
>
>う〜ん・・・悩んでみますが、
>
>Sheet2 これこれのデータがある
>Sheet3には これこれのデータがある
>本来は、こうなるべきなのに、こうなってしまった。
>
>もちろん、重複に関するところだけでいいので
>具体的な文字列として教えてもらえませんか?
・ツリー全体表示

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

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

>そのまま使わせていただきましたが、複数結果表示されてしまいます・・・

えっ??
そうですか?

う〜ん・・・悩んでみますが、

Sheet2 これこれのデータがある
Sheet3には これこれのデータがある
本来は、こうなるべきなのに、こうなってしまった。

もちろん、重複に関するところだけでいいので
具体的な文字列として教えてもらえませんか?
・ツリー全体表示

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

引用なし
パスワード
   ▼β さん:
なるほど・・・
参考になりました。
有難うございます。
初心者なもので、どのプログラムをどこに書いたら良いのかが分からず・・・

また複数一致するものがある場合に、最初のものだけ結果表示するという件のプログラム有難うございます。
そのまま使わせていただきましたが、複数結果表示されてしまいます・・・

>▼あや さん:
>
>こんにちは
>
>まず、私がアップした TestRed は標準モジュールに書きますが
>そちらのショートカットキー設定のマクロも標準モジュールに書くと想定していました。
>コードは、ここにかかなければいけないという、特殊なものを除いては、どこにでもかけます。
>ただ、どこにかくとどうなるということを意識して、整合性のあるコードを書く必要があります。
>私個人は、基本的には標準モジュールに書く、その他のモジュール(シートモジュール等。
>総称してオブジェクトモジュールといいます)には、イベント処理等の部分のみを書く。
>こんな方針ですが、特に上級者の皆さんは、基本的にはオブジェクトモジュールに書く、
>標準モジュールは共通処理等、コード実行を裏ででささえる補助的なものを書くといわれる人が
>少なくありません。
>
>以下のようなページが参考になると思います。
>
>ht p://officetanaka.net/excel/vba/beginner/10.htm
>ht p://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_200_040.html
>ht p://it.g-tec-inc.co.jp/blog/vba/vbe
>
>>複数一致した場合に最初に一致したものだけを結果表示およびセルを赤く表示
>
>Private Sub CommandButton1_Click()
>  Dim dic As Object
>  Dim Dup As Object
>  Dim i As Long
>  Dim v As Variant
>  Dim c As Range
>  Dim Red As Range
>
>  Set dic = CreateObject("Scripting.Dictionary")
>  Set Dup = 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 Not Dup(dic(c.Value)) Then
>          Dup(dic(c.Value)) = True
>          If Red Is Nothing Then
>            Set Red = c
>          Else
>            Set Red = Union(Red, c)
>          End If
>        End If
>      End If
>    Next
>    .Select
>  End With
>  
>  If Dup.Count > 0 Then
>    Red.Interior.Color = vbRed
>    MsgBox "以下の重複があります" & vbLf & Join(Dup.keys, vbLf)
>  Else
>    MsgBox "重複はありませんでした"
>  End If
>
>
> End Sub
・ツリー全体表示

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

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

こんにちは

まず、私がアップした TestRed は標準モジュールに書きますが
そちらのショートカットキー設定のマクロも標準モジュールに書くと想定していました。
コードは、ここにかかなければいけないという、特殊なものを除いては、どこにでもかけます。
ただ、どこにかくとどうなるということを意識して、整合性のあるコードを書く必要があります。
私個人は、基本的には標準モジュールに書く、その他のモジュール(シートモジュール等。
総称してオブジェクトモジュールといいます)には、イベント処理等の部分のみを書く。
こんな方針ですが、特に上級者の皆さんは、基本的にはオブジェクトモジュールに書く、
標準モジュールは共通処理等、コード実行を裏ででささえる補助的なものを書くといわれる人が
少なくありません。

以下のようなページが参考になると思います。

ht p://officetanaka.net/excel/vba/beginner/10.htm
ht p://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_200_040.html
ht p://it.g-tec-inc.co.jp/blog/vba/vbe

>複数一致した場合に最初に一致したものだけを結果表示およびセルを赤く表示

Private Sub CommandButton1_Click()
  Dim dic As Object
  Dim Dup As Object
  Dim i As Long
  Dim v As Variant
  Dim c As Range
  Dim Red As Range

  Set dic = CreateObject("Scripting.Dictionary")
  Set Dup = 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 Not Dup(dic(c.Value)) Then
          Dup(dic(c.Value)) = True
          If Red Is Nothing Then
            Set Red = c
          Else
            Set Red = Union(Red, c)
          End If
        End If
      End If
    Next
    .Select
  End With
  
  If Dup.Count > 0 Then
    Red.Interior.Color = vbRed
    MsgBox "以下の重複があります" & vbLf & Join(Dup.keys, vbLf)
  Else
    MsgBox "重複はありませんでした"
  End If


End Sub
・ツリー全体表示

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

引用なし
パスワード
   ▼β さん:
いろいろいじってみたらなぜか途中から上手くいきました・・・
頂いたプログラムはほとんど変更していないのに・・・
とにかく有難うございます!!

因みになのですが・・・
CommandButton1で一致したものを全て表示ではなく、複数一致した場合に最初に一致したものだけ、あるいは最後に一致したものだけを結果表示およびセルを赤く表示したい場合にはどうしたらよいのでしょうか?

>▼あや さん:
>
>>▼β さん:
>>ショートカットキーの割り当てでエラーが出てきてしまいます・・・
>>以下のようだとだめなのでしょうか。
>
>こちらで、標準モジュールにコードをコピペして、そのまま実行しましたが
>正常に登録されますよ。
>不思議ですねぇ。
>
>もちろんコード実行時に標準モジュールに TestRed が書かれているという前提ですが。
>
>あっ、いいわすれてましたが、TestRed は標準モジュールに書きます。
>
>>また、下記のプログラムをそのままコピーして使用させていただきましたが、”重複はありません”と常に表示されてしまいます・・・
>
>↑で書きましたがシートモジュールではなく標準モジュールです。
>で、このマクロは、B列の赤色のセルを捜しています。
>この赤は、シートモジュールのCommandButton1_Click() ルーティンで塗られます。
>赤に塗られたセルがない場合は、重複がないとみなされます。
>
>この実行は、Sheet3をアクティブにして行われると理解しています。
>
>
>>画面左側のワークシート選択するところでSheet3を選択し、(General)のところに下記のプログラムを記入すればよいのでしょうか?
>>
>>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 c Is Nothing Then
>>    MsgBox "重複セルはありません"
>>  Else
>>    c.Select
>>  End If
>> 
>>  Application.FindFormat.Clear
>> 
>>End Sub
>>
>>
>>>▼あや さん:
>>>
>>>>(CommandButton1 がActiveXなので、一致箇所もActiveXのほうがいいと思いますが)
>>>
>>>思いなおして。
>>>この処理はSheet3を見ながらの処理になるので、標準モジュールに書きましょう。
>>>で、これをボタン登録してもいいのですが、ボタンがシートの上のほうにあって
>>>検索せるが下のほうにあると、「次へ」の操作で、シートをまた上のほうにスクロールする
>>>必要があり操作が煩雑になります。
>>>
>>>なので、マクロにショートカットキーを割り当てて、Ctrl/● とやったほうが操作しやすいかも。
>>>
>>>なお、ボタン(マクロ)は1つでまかないましょう。
>>>
>>>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 c Is Nothing Then
>>>    MsgBox "重複セルはありません"
>>>  Else
>>>    c.Select
>>>  End If
>>>  
>>>  Application.FindFormat.Clear
>>>  
>>>End Sub
・ツリー全体表示

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

引用なし
パスワード
   ▼β さん:
標準モジュールに記入することでエラーは消えました!
有難うございます!!
ですがショートカットキーで飛んでくれません・・・
該当のセルは赤く表示されているのに・・・泣

Sub Test()
  Application.MacroOptions Macro:="TestRed", ShortcutKey:="j"
End Sub

はSheet3上に記入して良いのですよね?
あと、この記述だとCtrl+Jをすると飛ぶということでよいのですよね??

>▼あや さん:
>
>>▼β さん:
>>ショートカットキーの割り当てでエラーが出てきてしまいます・・・
>>以下のようだとだめなのでしょうか。
>
>こちらで、標準モジュールにコードをコピペして、そのまま実行しましたが
>正常に登録されますよ。
>不思議ですねぇ。
>
>もちろんコード実行時に標準モジュールに TestRed が書かれているという前提ですが。
>
>あっ、いいわすれてましたが、TestRed は標準モジュールに書きます。
>
>>また、下記のプログラムをそのままコピーして使用させていただきましたが、”重複はありません”と常に表示されてしまいます・・・
>
>↑で書きましたがシートモジュールではなく標準モジュールです。
>で、このマクロは、B列の赤色のセルを捜しています。
>この赤は、シートモジュールのCommandButton1_Click() ルーティンで塗られます。
>赤に塗られたセルがない場合は、重複がないとみなされます。
>
>この実行は、Sheet3をアクティブにして行われると理解しています。
>
>
>>画面左側のワークシート選択するところでSheet3を選択し、(General)のところに下記のプログラムを記入すればよいのでしょうか?
>>
>>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 c Is Nothing Then
>>    MsgBox "重複セルはありません"
>>  Else
>>    c.Select
>>  End If
>> 
>>  Application.FindFormat.Clear
>> 
>>End Sub
>>
>>
>>>▼あや さん:
>>>
>>>>(CommandButton1 がActiveXなので、一致箇所もActiveXのほうがいいと思いますが)
>>>
>>>思いなおして。
>>>この処理はSheet3を見ながらの処理になるので、標準モジュールに書きましょう。
>>>で、これをボタン登録してもいいのですが、ボタンがシートの上のほうにあって
>>>検索せるが下のほうにあると、「次へ」の操作で、シートをまた上のほうにスクロールする
>>>必要があり操作が煩雑になります。
>>>
>>>なので、マクロにショートカットキーを割り当てて、Ctrl/● とやったほうが操作しやすいかも。
>>>
>>>なお、ボタン(マクロ)は1つでまかないましょう。
>>>
>>>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 c Is Nothing Then
>>>    MsgBox "重複セルはありません"
>>>  Else
>>>    c.Select
>>>  End If
>>>  
>>>  Application.FindFormat.Clear
>>>  
>>>End Sub
・ツリー全体表示

【76824】Re:ExcelVBAで出来ること
発言    - 15/3/18(水) 20:47 -

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

選べる環境におられるならAccessでよろしいのではないですか。
とくに、Excelに見えないという点において、
たとえ逆立ちしても ExcelはAccessにかないません。
・ツリー全体表示

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

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

>▼β さん:
>ショートカットキーの割り当てでエラーが出てきてしまいます・・・
>以下のようだとだめなのでしょうか。

こちらで、標準モジュールにコードをコピペして、そのまま実行しましたが
正常に登録されますよ。
不思議ですねぇ。

もちろんコード実行時に標準モジュールに TestRed が書かれているという前提ですが。

あっ、いいわすれてましたが、TestRed は標準モジュールに書きます。

>また、下記のプログラムをそのままコピーして使用させていただきましたが、”重複はありません”と常に表示されてしまいます・・・

↑で書きましたがシートモジュールではなく標準モジュールです。
で、このマクロは、B列の赤色のセルを捜しています。
この赤は、シートモジュールのCommandButton1_Click() ルーティンで塗られます。
赤に塗られたセルがない場合は、重複がないとみなされます。

この実行は、Sheet3をアクティブにして行われると理解しています。


>画面左側のワークシート選択するところでSheet3を選択し、(General)のところに下記のプログラムを記入すればよいのでしょうか?
>
>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 c Is Nothing Then
>    MsgBox "重複セルはありません"
>  Else
>    c.Select
>  End If
> 
>  Application.FindFormat.Clear
> 
>End Sub
>
>
>>▼あや さん:
>>
>>>(CommandButton1 がActiveXなので、一致箇所もActiveXのほうがいいと思いますが)
>>
>>思いなおして。
>>この処理はSheet3を見ながらの処理になるので、標準モジュールに書きましょう。
>>で、これをボタン登録してもいいのですが、ボタンがシートの上のほうにあって
>>検索せるが下のほうにあると、「次へ」の操作で、シートをまた上のほうにスクロールする
>>必要があり操作が煩雑になります。
>>
>>なので、マクロにショートカットキーを割り当てて、Ctrl/● とやったほうが操作しやすいかも。
>>
>>なお、ボタン(マクロ)は1つでまかないましょう。
>>
>>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 c Is Nothing Then
>>    MsgBox "重複セルはありません"
>>  Else
>>    c.Select
>>  End If
>>  
>>  Application.FindFormat.Clear
>>  
>>End Sub
・ツリー全体表示

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

引用なし
パスワード
   ▼β さん:
ショートカットキーの割り当てでエラーが出てきてしまいます・・・
以下のようだとだめなのでしょうか。

Sub Test()
  Application.MacroOptions Macro:="TestRed", ShortcutKey:="j"
End Sub

また、下記のプログラムをそのままコピーして使用させていただきましたが、”重複はありません”と常に表示されてしまいます・・・
画面左側のワークシート選択するところでSheet3を選択し、(General)のところに下記のプログラムを記入すればよいのでしょうか?

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 c Is Nothing Then
    MsgBox "重複セルはありません"
  Else
    c.Select
  End If
 
  Application.FindFormat.Clear
 
End Sub


>▼あや さん:
>
>>(CommandButton1 がActiveXなので、一致箇所もActiveXのほうがいいと思いますが)
>
>思いなおして。
>この処理はSheet3を見ながらの処理になるので、標準モジュールに書きましょう。
>で、これをボタン登録してもいいのですが、ボタンがシートの上のほうにあって
>検索せるが下のほうにあると、「次へ」の操作で、シートをまた上のほうにスクロールする
>必要があり操作が煩雑になります。
>
>なので、マクロにショートカットキーを割り当てて、Ctrl/● とやったほうが操作しやすいかも。
>
>なお、ボタン(マクロ)は1つでまかないましょう。
>
>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 c Is Nothing Then
>    MsgBox "重複セルはありません"
>  Else
>    c.Select
>  End If
>  
>  Application.FindFormat.Clear
>  
>End Sub
・ツリー全体表示

【76821】Re:ExcelVBAで出来ること
発言  β  - 15/3/18(水) 17:13 -

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

質問のようなことができるかといわれれば、できますという回答になります。
(もちろん、あるところまでいくと、限界はありますが、少なくともhihiroro さんが
 イメージされていることはできます)

ただ、それを、hihiroro さんが作るとなると、もう大変ですよ。
この先、かなり、VBAについて熟達した段階ではできるでしょう。
仮に、回答者側から、こんな感じというコードがアップされても
hihiroro さんにとっては、一文の価値もないですよね。
hihiroro さん自身が、そういうものをつくれるようにならなければいけないわけですから。

悪いことは言いません。
TestBoxのかわりに、TextBoxより、もっと融通性というか柔軟性のある「セル」があります。
TextBoxの場合は、様々なデータ処理を自前コードで実施する必要がありますが
「セル」なら、その後ろに「エクセル」という、頼もしい「保護者」がいて
あれこれ、面倒を見てくれます。

まずは、ユーザーフォームなんて考えないで、シートを入力フォームと考えて
そこにデータをいれる。
で、そのデータを、VBAで、あれこれ処理をして、必要なレイアウトの帳票に展開する。

そこから始めるのがベストだと思います。
・ツリー全体表示

【76820】ExcelVBAで出来ること
質問  hihiroro  - 15/3/18(水) 16:47 -

引用なし
パスワード
   はじめまして。現在office2013のexcelで
売上、集計、原価計算などをそれぞれのシートにただ入力しています。
オート集計、リンク程度の小技しか使用していません。
データはシートにそのまま打ち込んでいます。


私がしたいことは、上記のデータが連動したシステムを作成できれば
と思っています。
売上で入力するデータを、テキストボックスから入力し
登録ボタンから登録、そして修正、削除ボタンが機能する。
別の画面では、
データの集計、印刷もできる。

フォーム画面などを使って、一見エクセルに見えないシステムを目指したいのですが、
その場合、エクセルとVBAで可能なのでしょうか?

それとも、Accessなど使用するべきなのでしょうか?


エクセルでどこまできるのかがわかりません。

イメージとして、データベースがあり、そこへ登録、追加、修正、削除可能で
そのデータからセレクトして、一覧表示、印刷ができるシステム・・・
を作りたいのですが、


漠然とした質問ですみません
何かヒントがありましたら、お返事よろしくお願いします。
・ツリー全体表示

【76819】Re:検索ワードを入力して検索する時に、...
質問  さとちぃ  - 15/3/18(水) 14:01 -

引用なし
パスワード
   さとちぃです。
この度はいろいろと教えていただきありがとうございます。

無事問題解決致しました。
関連のリンク、大変参考になりました。
本当にありがとうございました。
・ツリー全体表示

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