https://oshiete.goo.ne.jp/qa/9671375.html
前回の引き続きです。
よろしくお願いします。
ボタンマクロの名前です。
xlsb'!ボタン2_Click でした。
前回は質問の補足が不足してしまい焦ってしまって、一気に沢山質問してしまい…
混乱してしまいました。1個づつ落ち着いて取り組んでいこうと思います。
よろしくお願いします。
増え続けていくデータの領域指定について、ご教授お願いします。
名前の定義の範囲指定について
シート名は 管理表 です。
AからZ列まであって、
行については増え続けていきます。増えていく行を確認するのは、A列です。
項目名の記載のあるのは、A6です。
データを入力するのは、A7から取りあえず、Z7までにしたいです。
データはこれから増え続ける予定です。
補足として、画像を別添しました。
No.1
- 回答日時:
名前の定義ですが前回のスレッドでは
=OFFSET(管理表!A7,0,0,COUNTA(A:A)-1,18)
としていましたよね。
18が横の数なので26に変えたらZ列までになります。
A列の文字を数えているのでA6の項目の分1引いているのが
この式になります。
ひとつ心配なのはボタンに隠れるA1:A5に
なにか誤って文字が入るとずれることですが
ま、それは注意すれば大丈夫でしょう。
大事な事忘れてました。絶対指定が抜けてましたね。
これじゃ入力するセルによって範囲がずれてしまいます。
ですから式はこんな感じかな。
=OFFSET(管理表!$A$7,0,0,COUNTA($A:$A)-1,26)
ただ僕の場合こういった表は$A$6始まりにします。
項目名とかも拾えるから。
ま、そこは好みですが。
ありがとうございました。
早速、今まで入力した分の名前の定義を絶対指定にします。
A6始まりですね。こちらも早速直しておこうかと思います。
No.2ベストアンサー
- 回答日時:
まずさあ、
sub ほにゃらか() ’ほにゃらかはあなたがつけたいSub名を自由に
ここに記述しないと!!
End sub
どうやって今まで試してたの?
で
Worksheets("Sheet1”)に変えてもいいって書きましたよね。
Worksheets("管理表”). て、なってないんじゃない?
それとあくまでもそれは入れ物で中身はまだ書いてないからね。
絞り込んでるかいないかをそうやって判断できるから
それぞれの場合でかき分けたらいいかなというもの。
いつもありがとうございます。
今日は過去のスレッドを再確認しながら、オートフィルター部分を再勉強してます。
わからない事ばかりで、何度も質問してしまって、申し訳ない気持ちでいっぱいです。
ついていけるように頑張りますので、またご教授お願いします。
No.3
- 回答日時:
こんばんは!
横からお邪魔します。
質問内容を拝見するとわざわざ「コマンドボタン?」を使わなくてもChangeイベントで良いのでは?
あくまで一例です。
まず↓のコードを標準モジュールにしてください。
Sub Sample1() 'この行から//
Dim lastRow1 As Long, lastRow2 As Long, lastCol As Long, wS As Worksheet
Set wS = Worksheets("Sheet2") '//「Sheet2」は実際のシート名に!//
With Worksheets("Sheet1") '//「Sheet1」も実際のシート名に!//
lastRow1 = .Cells(Rows.Count, "A").End(xlUp).Row
lastCol = .Cells(6, Columns.Count).End(xlToLeft).Column
lastRow2 = wS.Cells(Rows.Count, "A").End(xlUp).Row
If lastRow2 > 5 Then
Range(wS.Cells(6, "A"), wS.Cells(lastRow2, lastCol)).Clear
End If
.Range("A6").AutoFilter field:=1, Criteria1:=.Range("A1")
If .Cells(Rows.Count, "A").End(xlUp).Row > 6 Then
Range(.Cells(6, "A"), .Cells(lastRow1, lastCol)).SpecialCells(xlCellTypeVisible).Copy wS.Range("A6")
.AutoFilterMode = False
Else
.AutoFilterMode = False
MsgBox "該当データなし"
End If
End With
End Sub 'この行まで//
次に↓のコードを元データ(Sheet1)のシートモジュールにしてください。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target <> "" And Target.Address = "$A$1" Then
Call Sample1
End If
End Sub
これでSheet1のA1セルが変更のたびに
Sheet2のA6以降にデータが表示されると思います。m(_ _)m
ありがとうございます。
A1セルに表示しただけで出来るんですね…
ご教授お願いします。
sheet1の名前が 管理表 です。
検索結果を表示したいのも、sheet1のA1のセルだった場合はどうしたらよいのでしょうか?
検索範囲はsheet1のA6からZにデーターを入れます。
行数はどんどん増える予定です。
恥ずかしながら…VBA初心者ですので、そのままコピペさせていただければ嬉しいです。
No.4
- 回答日時:
No.3です。
>sheet1の名前が 管理表 です。
>検索結果を表示したいのも、sheet1のA1のセルだった場合はどうしたらよいのでしょうか?
まず、Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト
Sub Sample1() 'この行から//
Dim lastRow As Long, lastCol As Long, wS As Worksheet
Set wS = Worksheets("Sheet2") '//「Sheet2」は実際のシート名に!//
With Worksheets("管理表") '//←シート名を変更★//
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
lastCol = .Cells(6, Columns.Count).End(xlToLeft).Column
wS.Cells.Clear
.Range("A6").AutoFilter field:=1, Criteria1:=.Range("A1")
If .Cells(Rows.Count, "A").End(xlUp).Row > 6 Then
Range(.Cells(6, "A"), .Cells(lastRow, lastCol)).SpecialCells(xlCellTypeVisible).Copy wS.Range("A1")
.AutoFilterMode = False
Else
.AutoFilterMode = False
MsgBox "該当データなし"
End If
End With
End Sub 'この行まで//
次に表示されているVBE画面の左側に「Sheet1(管理表)」と表示されていると思いますので
そこをダブルクリック → 表示されたVBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト
Private Sub Worksheet_Change(ByVal Target As Range)
If Target <> "" And Target.Address = "$A$1" Then
Call Sample1
End If
End Sub
Excel画面を閉じて「管理表」シートのA1セルに検索データを入力してみてください。m(_ _)m
ありがとうございました。
無事標準モジュールに貼り付けることが出来ました。
モジュールの画面の左側に「Sheet1(管理表)」と表示されているところはどこでしょうか?
ここの部分が良く割りませんでした。
>次に表示されているVBE画面の左側に「Sheet1(管理表)」と表示されていると思いますので
ご教授お願いします。
No.5
- 回答日時:
No.3・4です。
投稿後もう一度読み返してみると・・・
>検索結果を表示したいのも、sheet1のA1のセルだった場合はどうしたらよいのでしょうか?
すなわち元データは「管理表」シートにあり、「Sheet1」に表示したい!というコトですね?
No.4の標準モジュール、コード内の
>Set wS = Worksheets("Sheet2")
を
>Set wS = Worksheets("Sheet1")
に変更してください。m(_ _)m
No.6
- 回答日時:
続けてお邪魔します。
>ここの部分が良く割りませんでした。
>次に表示されているVBE画面の左側に「Sheet1(管理表)」と表示されていると思いますので
それでは別の方法で・・・
一旦VBE画面を閉じてください。
画面左下にあるシート名「管理表」のシート見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト
Private Sub Worksheet_Change(ByVal Target As Range)
If Target <> "" And Target.Address = "$A$1" Then
Call Sample1
End If
End Sub
これで上記コードが「管理表」シートのシートモジュールになりましたので
「管理表」シートのA1セルに色々データを入れてみてください。m(_ _)m
親切にご教授頂いて、ありがとうございます。
貼り付けたところ・・・実行時エラー7
メモリが不足しています。
とのコメントでした。
どうしたらよいのでしょうか?
ご教授お願いします。
No.7
- 回答日時:
ん~~~
>私の貼り付けがまずかったのでしょうか?
貼り付け方云々というよりシート名が全く違っていますよね。
画像が小さくて確認できないのですが、
貼り付け先Sheetのシート名は「Sheet1」や「Sheet2」ではなく、「貼り付け?」(?の部分がよく判りません)
というシート名になっていますね。
コード内の「Sheet2」の部分をそのシート名にする必要があります。
※ 今まで説明してきたことは基本的なコトです。
当然のコトですが最初からできる人はいませんが、ある程度基本的なコトが理解できていないと
他人のコードをコピー&ペーストするだけでは、不具合があってもご自身で手直しができません。
当方がココで投稿しているコードがベストとは言えませんので、
最初は無駄なコードがあっても良いと思うので、
まずはご自身でコードを書いてみるコトだと思います。
そうした上ででこちらのようなサイトを利用すれば他の方々からも
色々アドバイスがいただけると思います。m(_ _)m
VBAを始めたばかりで、勉強不足で申し訳ありません。
VBAの本を読みながら、ここで質問させていただきながら、必死で勉強しています。
sheet2は貼り付け用という名前になっていますが、
sheet1の管理表のA1に検索地を設けて、sheet1のA6からZは項目名。
A7からデータがたくさん入っていきます。
こちらの勝手な判断で、sheet2はこの操作には関係ないかと思ってしまって・・・
申し訳ありませんでした。
でも…どうしてもご教授お願いしたいのです。m(__)m
No.8
- 回答日時:
それでは最後にコードにコメントを記載しておきます。
まず↓の画像の左側「管理表」シートのシートモジュールに↓のコードをコピー&ペースト
Private Sub Worksheet_Change(ByVal Target As Range)
If Target <> "" And Target.Address = "$A$1" Then
Call Sample1
End If
End Sub
次に標準モジュールに↓のコードをコピー&ペースト
Sub Sample1() 'この行から//
Dim lastRow As Long, lastCol As Long, wS As Worksheet
'//「貼り付け用」シートを「wS」という変数に格納//
Set wS = Worksheets("貼り付け用")
'//「管理表」シートの・・・//
With Worksheets("管理表")
'//最終行を取得//
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
'//6行目で最終列を取得//
lastCol = .Cells(6, Columns.Count).End(xlToLeft).Column
'//「貼り付け用」シートのデータを一旦消去//
wS.Cells.Clear
'//「管理表」シートのA列をA1セルのデータをキーとしてフィルタを掛ける//
.Range("A6").AutoFilter field:=1, Criteria1:=.Range("A1")
'//A1セルのデータがあれば表示されているデータを「貼り付け用」シートのA1に貼り付け//
'//(データがない場合は項目行だけの表示になるので「>6」としている)//
If .Cells(Rows.Count, "A").End(xlUp).Row > 6 Then
Range(.Cells(6, "A"), .Cells(lastRow, lastCol)).SpecialCells(xlCellTypeVisible).Copy wS.Range("A1")
'//オートフィルタを解除//
.AutoFilterMode = False
Else
'//A1セルのデータがない場合、メッセージボックスを表示//
.AutoFilterMode = False
MsgBox "該当データなし"
End If
End With
End Sub 'この行まで//
これで「管理表」シートのA1セルにデータを入力してみてください。
※ こちらで上記のコードでは↓の画像のような感じになります。m(_ _)m
No.9
- 回答日時:
ちょっと整理しておきますね。
それと僕の話とtomo04さんの話は一緒くたにすると意味不明になるから
ブックは別名でお願いします。
>前回のスレッドの質問で、オートフィルターの検索マクロを
この話しの流れは表示的には管理表でオートフィルターをかけるのと
ほぼ同じデータだと。
ただ表示するのは別のシートのK17:L18で指定したもので
管理表をフィルタリングしたデータを、その別シートに
という話でしたよね。
だからオートフィルターで絞り込んだのを、もう一つのシートに
貼り付ける想定で話しかけてました。
補足の②がその時のことです。
オートフィルターで操作するときに事前に絞り込み状態を知って
処理するのが妥当と考えたのです。
その流れの中で、フィルターの詳細設定に、ちょっと横道それましたが
(というか、そっちが本筋で良かったんじゃないかと思うけど、)
補足②でオートフィルターに戻す話を言われたので・・・
動かすこと自体はどっちでも出来ますよ。
ただ、No1に書いた通りですが、管理表のA1:A5は名前定義に
あたって使わない前提ですから、お忘れなく。
いつも大変お世話になっております。
3/16に教えていただいて、ちゃんと動いていたはずの列Qのセルの内、一つに任意数字を入力したら、A1の重複しているすべての番号にコピーされるというマクロを実行したら、エクセルが応答無くなってしまうようになってしまいました。
成功していた分をコピペで何度もリトライしてもダメでした。
助けてください。
取り急ぎ補足説明に画像を添付します。
No.10
- 回答日時:
この質問最初の画面が変だなぁ。
どうしてこうなったのかな?
僕は前のスレッドの最後の補足の画面で処理することを
考えてました。K17:L18に入力したので絞るから
そのシートのコマンドボタンで起動。
勿論オートフィルターは管理表シートですが、
そこは手で操作するわけじゃないと。
表示するのも入力した画面だしね。
それがフィルターの詳細設定なら、管理表シートはデータ置き場
というだけで、名前定義さえ済んでたら、その名前しか使わない
考えでした。
前のシートと違う理由は、質問用で並行して勉強して行こうと思い、新たなブックにコピーして、用語を触ったりして、教えて頂いて成功したのを原本に貼り付けていました。
どころが…私の勉強不足から、3月16日16時に頂いたいた、A列のセルの中身が…例えば、A列に123という数字が5行あったら、A列に123と入力された行にQ列で指定した数字をコピーするという大切なプログラムを教えて頂いたのに…
Q列に数字を入れたり、消したりしたら、エクセルが応答無しになってしまうトラブルが発生してしまいました。
とても大事なプログラムです。
助けてください。お願いします。
本当にごめんなさい。自分で何とかしようと頑張ったんですが…難しくて、手に負えませんでした。
助けてください。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Excel(エクセル) excelの列幅高さが勝手に変わる(特定のPCだけ) 8 2022/07/14 16:51
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 12:30
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Excel(エクセル) 別シートの表の値を参照したい 2 2022/03/30 15:11
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
Microsoft1Officeの互換ソフト...
-
Excel ピボットテーブルで日付...
-
エクセル関数を教えてください
-
【マクロ】その時、その時で変...
-
【マクロ】読取専用のファイル...
-
LOOKUP関数を使えばいいのでし...
-
エクセル 白黒印刷で白線を印刷...
-
【関数】先頭だけにある、半角...
-
【関数】適切な文字数の数字を...
-
Excelのチェックボックスの使い...
-
エクセルでの作業計算方法について
-
Excelのpivotについて質問です
-
WPS OFFICEでの縦書きについて
-
時間によってファイル名が変わ...
-
エクセルのセルに同じ大きさの...
-
Aというブックの1というシート...
-
エクセルの順位別一覧表の自動...
-
西暦や和暦の表示をyyyymmdd表...
-
【マクロ】エクセルにかいてあ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報
よく考えたら、この質問には名前の定義は不要なんですよね。
すみませんでした。
これが解決したら、名前の定義について、ゆっくり考えて行きたいと思います。
前回のスレッドの質問で、オートフィルターの検索マクロを教えていただいていたのを思い出しました。
コピペで、ワークシート名を入れたのですが、エラーになってしまいました。
ご教授お願いします。
>次に表示されているVBE画面の左側に「Sheet1(管理表)」と表示されていると思いますので
そこをダブルクリック → 表示されたVBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト
この部分、見つけました。
ありがとうございました。
実行したところ、データが全て消えてしまいました。
私の貼り付けがまずかったのでしょうか?
助けてください(汗)
Qの列のコピーや削除をしたら、エクセルが応答無くなってしまって、困っています。
3/16のスレッドに戻って、何度もトライしているのですが、結果は同じで。
せっかく上手くモジュールが作動して、喜んでいたのに・・・
どうしたらよいのでしょうか?
とても困っています。
一行づつ茶色に反転させて試してみました。
添付の通り、一行目から黄色くなってしまいました。
全部反転して試しました。
画像添付します。