よろしくお願いします。エクセルは2013です
エクセルもよくわからないのに、gooの皆さんにマクロを1から教えてもらって
少しづつ機能を追加していったら、シートモジュールのマクロが、空白行とコメントを
除いて1300行近くに膨れ上がってしまいました
先日もgooの皆さんに教えてもらって、180行のIF文を20行に削減できました
ありがとうございました
今回のマクロもまた、うまい人が書けばもっと短くなるような感じがするので
よい方法があれば教えてください
マクロは以下のようになっています
1、 2行から40行に色々なデータが表示してあります
2、 それらはA列の2行から40行に a から d を書いてグループ分けしてあります
3、 マクロは a,b と書いてあるセルをWクリックしたら、aかbをA列の2行から
40行に書いてある行を表示するマクロです
4、 考え方としては、「Wクリックしたセルに書いてあるアルファベットと同じものが
A列に書いてある行を表示する」でよいと思います
5、 ところが、例によって、私のマクロは、Wクリックしたセルにaと書いてあったらaと
書いてある行を表示、同様にabと書いてあったら a or b と書いてある行を表示に
なっています
そこで質問ですが
4の方法で処理するマクロにするには、どう書き換えたらよいでしょうか?
以下は現状のマクロの肝心な部分です
If Not Intersect(Target, Rows(41), Range("S:S")) Is Nothing Then 'by goo
' S41をWクリックした(そのセルには "ab行" と書いてある)
Cancel = True
Application.ScreenUpdating = False
'その他の処理
For i = 2 To 40 ' A列の2行から40行の間で
If UCase(Cells(i, 1).Value) = "A" Or UCase(Cells(i, 1).Value) = "B" Then
' a or A or b or B と書いてある行を表示
Rows(i).Hidden = False
Else
' それ以外は非表示
Rows(i).Hidden = True
End If
Next i
Application.ScreenUpdating = True
End If
うまく説明できていない場合は補足させてください
よろしくお願いします
No.1ベストアンサー
- 回答日時:
思ったほど、シンプルになりませんでしたが、こんな感じでしょうか。
ダブルクリックするセルは、特に限定していませんので、必要であれば追加してください。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim r As Range
Dim str1 As String
Dim str2 As String
Dim i As Long
Dim c As String
Cancel = True
Application.ScreenUpdating = False
str1 = StrConv(Target.Value, vbLowerCase + vbNarrow)
For Each r In Range("A2:A40")
str2 = StrConv(r.Value, vbLowerCase + vbNarrow)
For i = 1 To Len(str1)
c = Mid(str1, i, 1)
If c Like "[a-z]" Then
If InStr(str2, c) <> 0 Then Exit For
End If
Next i
If i > Len(str1) Then
r.EntireRow.Hidden = True
Else
r.EntireRow.Hidden = False
End If
Next r
Application.ScreenUpdating = True
End Sub
ママチャリさん、こんばんは。最近お世話になってばかりです
先日は詳しく説明していただきありがとうございました
お陰様でまた少し進歩できました
早速教えていただきありがとうございます
これほど難しいコードとは思いませんでした
書いていただいたコードが何をしているかは、ぼんやりとですがわかります
分かると書けるでは大違いですが・・・
Likeはgooで教えていただいてわかりますが
Like "*a*" などしか知らなくて
Like "[a-z]" この書き方は初めて知りました。色々な場面で使えます
ありがとうございます
これからじっくりやってみます。
教えていただいた通りにコピーして使っているだけだと進歩しないので
全行コメントが書けるように勉強します
また補足で報告させてください。
迅速に教えていただいてありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) ExcelのVBAコードについて教えて下さい。 2 2022/06/25 14:04
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
特定のPCだけ動作しないVBAマク...
-
メッセージボックスのOKボタ...
-
EXCELのVBAでRange("A1:C4")を...
-
ExcelのVBA。public変数の値が...
-
一つのTeratermのマクロで複数...
-
マクロの連続実行
-
TERA TERMを隠す方法
-
Excel VBAからAccessマクロを実...
-
ピボットテーブルでの毎回可変...
-
VBAのIF分で時間指定の条件式の...
-
OnTimeを使ったのですが「エラ...
-
エクセルでキーリストからデー...
-
TeraTermマクロの文字列結合
-
エクセルに張り付けた写真のフ...
-
ExcelVBAでPDFを閉じるソース
-
VBA初心者 Ctrl+での操作、ボタ...
-
EXCELのマクロの重複起動...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
ExcelのVBA。public変数の値が...
-
エクセルに張り付けた写真のフ...
-
他人が作ったマクロの理解
-
ExcelVBAでPDFを閉じるソース
-
TERA TERMを隠す方法
-
エクセルで別のセルにあるふり...
-
マクロ実行時、ユーザーフォー...
-
Excel VBAからAccessマクロを実...
-
EXCELのVBAでRange("A1:C4")を...
-
TeraTermマクロの文字列結合
-
PDF出力マクロについて。マクロ...
-
#defineの定数を文字列として読...
-
エクセルのマクロをセルの値に...
-
wordを起動した際に特定のペー...
おすすめ情報
説明が抜けていました。補足させてください
すでに何も書いてないWクリックセルが3つ用意してあります
ユーザーは、あらかじめ、その3つのセルにab bd ac などど
自分好みのグループ行を書いておいて、Wクリックでその行を表示するように
したいです
失礼しました
ママチャリさん、こんばんは。先ほどは大変お世話になりました。
完璧なエラー処理がされていて大変勉強になりました
下記の要領でうまくいきました。まだ全部を直していませんが、大幅に行削減が達成できそうです
親切に教えていただきましてありがとうございました。
文字数の関係で送り側のほんの一部です
If Not Intersect(Target, Rows(41), Range("K:K")) Is Nothing Then
Cancel = True 'abc行と表示
Call 行表示(Target) 'by goo ママチャリさん
End If
受け側です(最近教えてもらって覚えました)
Sub 行表示(ByVal Target As Range)