- 締切済み
Excelの質問です、ご教授お願いいたします。
ご教授お願いいたします。 例えば、シート1からシート10までのK1からO1までのセルの数値(文字)が入力されます、シート11のA1からE1にシート1のK1からO1まで表示して、シート11のA2からE2にシート2のK1からO1まで表示、シート11のA10からE10にシート10のK1からO1まで表示してます、その中のE1からE10を選択範囲として、どれかのセルに数値が表示されたら、最後に表示された数値(文字)の行(例えばA6からE6までの数値(文字))をシート11のR1からV1に表示させたいのです。 アドバイスで教えていただきました 範囲のあるシートタブを右クリックし、コードの表示を選択。 以下のマクロを登録します。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1:A10")) Is Nothing Then Exit Sub Else Range("B1").Value = Target.Text End If End Sub ですと、シート単体では、思い通りになったのですが、別シートから表示したセルが、最後に表示されたことにならないのか、反映されませんでした。 よろしければ、もう少しご教授お願いできましたらよろしくお願いいたします。 一つのブックを開いている時の処理です、お会計処理で、ある一部分のみお客様に表示したいのです。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- kkkkkm
- ベストアンサー率66% (1719/2589)
No3は、シート1からシート10までのK1からO1までのセルの入力に対応しましたが、シート11のA列の1行からD列の10行までの変化は無視してE1からE10だけの変化を見たい(シート1からシート10までのO1だけの入力(数式での自動計算ではない)に対応)でしたら If Intersect(Target, Sh.Range("K1:O1")) Is Nothing Then を If Intersect(Target, Sh.Range("O1")) Is Nothing Then に変更してください。
- kkkkkm
- ベストアンサー率66% (1719/2589)
数式で表示されているということだと思いますので、その内容の変化はWorksheet_Changeではとらえられません。 たぶん以下のようなことがやりたいのだと思いますので試してみてください。 ThisWorkbookのモジュールに Sheet1は実際のシート11のシート名にしてください。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Intersect(Target, Sh.Range("K1:O1")) Is Nothing Then Exit Sub End If With Sheets("Sheet1") If Sh.Name <> .Name Then .Range("R1:V1").Value = Sh.Range("K1:O1").Value End If End With End Sub
お礼
貴重なお時間を割いて頂き恐縮いたします。 沢山の方に、ご教授頂きどの方がベストアンサーとは、恐れ多く申し訳ございません。
- masnoske
- ベストアンサー率35% (67/190)
「その中のE1からE10を選択範囲として、どれかのセルに数値が表示されたら、最後に表示された数値(文字)の行(例えばA6からE6までの数値(文字))をシート11のR1からV1に表示させたい」であれば, Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("E1:E10")) Is Nothing Then Exit Sub Else Range("R1:V1").Value = Target.Value End If End Sub
お礼
貴重なお時間を割いて頂き恐縮いたします。 沢山の方に、ご教授頂きどの方がベストアンサーとは、恐れ多く申し訳ございません。
- Mathmi
- ベストアンサー率46% (54/115)
・ある特定のセルの値が変更された時に ・そのセルの行にある値を ・同じセルの値を別の範囲にコピーしたい という事でしょうか? 簡単にコードを組んでみました。 やってる事は、変更時のイベントで ・変更されたセルが変更を監視しているセル(例ではE1:E10)かチェック。 ・それなら、予め設定してあったコピーするセル範囲(例ではA1:E10)と、変更されたセルの行の重なったセル範囲を取得し ・そのセル範囲の値を、予め設定してあった貼り付け先セル範囲(例ではR1:V1)に張り付け。 を実行するだけです。 やってる一つ一つは簡単なので、ゆっくり見て行けばコードを理解するのも難しくないでしょうし、改造も難しくないと思います。 特に >お会計処理で、ある一部分のみお客様に表示したいのです。 とあり、仕事で使用するようですので、自分の使用するVBAのコードの大体の意味くらいは理解しておくべきでしょう。(でないと、何か問題が起こった場合にどうしようもできなくなる) VBAの作成・改修を一任できるスタッフがいるなら、その人が理解していれば済む話ですが。 Private Sub Worksheet_Change(ByVal Target As Range) Dim SearchRange As Range '値の変更をチェックするセル範囲 Set SearchRange = Worksheets("Sheet11").Range("E1:E10") Dim CopyRange As Range 'コピーする Set CopyRange = Worksheets("Sheet11").Range("A1:E10") Dim PasteRange As Range 'コピー先セル範囲 Set PasteRange = Worksheets("Sheet11").Range("R1").Resize(1, CopyRange.Columns.Count) '変更されたセルが指定範囲内かチェック If Intersect(Target, SearchRange) Is Nothing Then Exit Sub End If 'コピー元セル範囲の値をコピー先セル範囲にコピー PasteRange.Value = Intersect(Target.EntireRow, CopyRange).Value End Sub 余談 >アドバイスで教えていただきました との事ですが、もし掲示板で質問されたのなら、その頁へのリンクを張っておいた方が、回答する側としても分かりやすいです。
お礼
貴重なお時間を割いて頂き恐縮いたします。 沢山の方に、ご教授頂きどの方がベストアンサーとは、恐れ多く申し訳ございません。 たいへん勉強になりました、感謝しております。