Excel VBA質問箱 IV

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

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


2131 / 13645 ツリー ←次へ | 前へ→

【69651】検索前に戻したい a 11/8/17(水) 8:06 質問[未読]
【69652】Re:検索前に戻したい とおりすぎ 11/8/17(水) 9:32 回答[未読]
【69656】Re:検索前に戻したい a 11/8/17(水) 21:22 発言[未読]
【69662】Re:検索前に戻したい とおりすぎ 11/8/18(木) 10:14 回答[未読]
【69674】Re:検索前に戻したい a 11/8/19(金) 12:18 質問[未読]
【69675】Re:検索前に戻したい とおりすぎ 11/8/19(金) 14:10 回答[未読]
【69685】Re:検索前に戻したい a 11/8/20(土) 21:49 発言[未読]
【69724】Re:検索前に戻したい とおりすぎ 11/8/24(水) 14:43 回答[未読]
【69731】Re:検索前に戻したい a 11/8/25(木) 7:50 質問[未読]
【69732】Re:検索前に戻したい とおりすぎ 11/8/25(木) 8:52 回答[未読]
【69751】Re:検索前に戻したい a 11/8/26(金) 7:36 質問[未読]
【69753】Re:検索前に戻したい とおりすぎ 11/8/26(金) 10:26 回答[未読]
【69755】Re:検索前に戻したい a 11/8/26(金) 12:32 質問[未読]
【69757】Re:検索前に戻したい とおりすぎ 11/8/26(金) 15:12 回答[未読]
【69758】Re:検索前に戻したい a 11/8/26(金) 15:45 質問[未読]
【69759】Re:検索前に戻したい とおりすぎ 11/8/26(金) 16:34 回答[未読]
【69762】Re:検索前に戻したい a 11/8/26(金) 23:44 発言[未読]
【69775】Re:検索前に戻したい a 11/8/29(月) 7:39 質問[未読]
【69776】Re:検索前に戻したい とおりすぎ 11/8/29(月) 10:02 回答[未読]
【69778】Re:検索前に戻したい a 11/8/29(月) 12:16 質問[未読]
【69785】Re:検索前に戻したい とおりすぎ 11/8/29(月) 14:28 回答[未読]
【69787】Re:検索前に戻したい a 11/8/29(月) 14:42 お礼[未読]

【69651】検索前に戻したい
質問  a  - 11/8/17(水) 8:06 -

引用なし
パスワード
   はじめまして質問失礼します
現在マクロを組んでA1に検索をかけるとそれ以降に記載されてる文字から
A1内の文字と一致する物だけを検索できるようにしています

検索をかけると条件にあったものだけが表示されるのですが
TOPなどのアイコンをつくり
検索前の状態に戻るようにしたいのです
また1つ前のアイコンもつくり
1つ前に検索した物も残しておきたいのですが
その場合、どのようにマクロを組めばいいのでしょうか?

わからなかったのでお助けいただけると幸いです
よろしくお願いします

【69652】Re:検索前に戻したい
回答  とおりすぎ  - 11/8/17(水) 9:32 -

引用なし
パスワード
   >TOPなどのアイコンをつくり
>検索前の状態に戻るようにしたいのです
>また1つ前のアイコンもつくり
>1つ前に検索した物も残しておきたいのですが
>その場合、どのようにマクロを組めばいいのでしょうか?

検索をかける前に広域変数にセルをSetしておき、そのセルにGoTo
変数を2つ用意し、1つは変数がNothingのとき、Set。
もう一つは検索をかける直前に毎回Set。

【69656】Re:検索前に戻したい
発言  a  - 11/8/17(水) 21:22 -

引用なし
パスワード
   ▼とおりすぎ さん:
>>TOPなどのアイコンをつくり
>>検索前の状態に戻るようにしたいのです
>>また1つ前のアイコンもつくり
>>1つ前に検索した物も残しておきたいのですが
>>その場合、どのようにマクロを組めばいいのでしょうか?
>
>検索をかける前に広域変数にセルをSetしておき、そのセルにGoTo
>変数を2つ用意し、1つは変数がNothingのとき、Set。
>もう一つは検索をかける直前に毎回Set。

お返事ありがとうございます
広域変数にセルをSETする仕方がわからないのですが
もう少し詳しく教えていただけると幸いです
初心者な者でして・・・申し訳ございません

【69662】Re:検索前に戻したい
回答  とおりすぎ  - 11/8/18(木) 10:14 -

引用なし
パスワード
   Private 最初 As Range
Private 一つ前 As Range

Sub 検索Sample()
  Dim R As Range
  Dim 検索 As Range
 
  'ChartSheetがActiveだったりするとエラーになるので
  On Error Resume Next
  Set R = ActiveCell
  Set 検索 = ActiveSheet.UsedRange.Find("適当に変えてくれ")
  On Error GoTo 0
  If 検索 Is Nothing Then
    MsgBox "見つからなかった"
    Exit Sub
  End If
  If 最初 Is Nothing Then
    Set 最初 = R
  End If
  Set 一つ前 = R
  Application.Goto 検索
End Sub

Sub 一つ前に戻る()
  If 一つ前 Is Nothing Then Exit Sub
  Application.Goto 一つ前
End Sub

Sub 最初に戻る()
  If 最初 Is Nothing Then Exit Sub
  Application.Goto 最初
End Sub

Sub Reset_cell()
  Set 最初 = Nothing
  Set 一つ前 = Nothing
End Sub

【69674】Re:検索前に戻したい
質問  a  - 11/8/19(金) 12:18 -

引用なし
パスワード
   お返事ありがとうございます
大変親切に教えていただいて本当にありがとうございます
助かります

F1(TOP)とG1(1つ前)のセルを押すとその機能が使えるようにしたいのですが
教えていただいたのをやったのですが
どこの数値をドコに入力していいのかがわかりません・・・
こんなに丁寧に親切に教えていただいてるのに申し訳ございません
変える場所、自分で変更すべき場所はどこか教えていただけると幸いです
お手数ですがお願いできればと思います
よろしくお願いします

▼とおりすぎ さん:
>Private 最初 As Range
>Private 一つ前 As Range
>
>Sub 検索Sample()
>  Dim R As Range
>  Dim 検索 As Range
> 
>  'ChartSheetがActiveだったりするとエラーになるので
>  On Error Resume Next
>  Set R = ActiveCell
>  Set 検索 = ActiveSheet.UsedRange.Find("適当に変えてくれ")
>  On Error GoTo 0
>  If 検索 Is Nothing Then
>    MsgBox "見つからなかった"
>    Exit Sub
>  End If
>  If 最初 Is Nothing Then
>    Set 最初 = R
>  End If
>  Set 一つ前 = R
>  Application.Goto 検索
>End Sub
>
>Sub 一つ前に戻る()
>  If 一つ前 Is Nothing Then Exit Sub
>  Application.Goto 一つ前
>End Sub
>
>Sub 最初に戻る()
>  If 最初 Is Nothing Then Exit Sub
>  Application.Goto 最初
>End Sub
>
>Sub Reset_cell()
>  Set 最初 = Nothing
>  Set 一つ前 = Nothing
>End Sub

【69675】Re:検索前に戻したい
回答  とおりすぎ  - 11/8/19(金) 14:10 -

引用なし
パスワード
   aさんがどの程度の力量か解らないので、適当に解説します。

Userが何か操作を行ったときに実行されるVBAをイベントと呼びます。
シート上でのイベントに、セルを押したときと言うイベントはありません。

近いのは選択したセルを変更したときに実行されるSelectionChangeイベント
ですが、やじるしやEnter、Tabなどでセルを移動しても実行されますし、
逆に、すでに選択されているセルを、マウスで押しても実行されないなどの
制約があるためあまり推奨されません。

変わりにセルをダブルクリックや右クリックしたときに実行されるイベントを
推奨します。

記述法は、Excelの画面で、イベントを起こしたいシートを前面(Active)
にして、左下にあるのシートタブを右クリックし、出てきたショートカットの
コードの表示(V)を選択。

VBE画面が起動したら、上の方に(General)、(Declarations)と表示
されているコンボボックスの左の(General)をWorkSheetを選択。
右の(Declarations)から、BeforeDoubleClick(ダブルクリック)
もしくはBeforeRightClick(右クリック)を選択すると、

以下、ダブルクリックで進めます。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

End Sub
のような記述が自動で表示されますのでここにコードを記入。
引数のTargetにダブルクリックしたセルが入ります。
通常セルをダブルクリックしたときはセルの編集になりますが、
引数のCancelにTrueを入れると編集になりません。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Cancel = True
  Msgbox Target.Address
End Sub

を記述して適当なセルをダブルクリックしてください。

このままだとどのセルでも実行されてしまいます。
今回はF1とG1でのみ実行と言うことで、
この前のコードは標準Moduleにでも記述しておいて、
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Select Case Target.Address
  Case "$F$1"
    Cancel = True
    Call 最初に戻る
  Case "$G$1"
    Cancel = True
    Call 一つ前に戻る
  End Select
End Sub
のようにして、ダブルクリックされたセルアドレスでCallするプロシージャを
分けます。

ただ、ダブルクリックするとActiveCellがそのセルに移りますので、Findでの
引数は工夫したほうがいいです。
たとえば、検索のたび、見つかったセルを広域変数に取っておいて、Findの
引数Afterにそのセルを指定する(変数がNothingなら、Range("A1")など)など。
また、Findの引数はすべて指定した方が良いです。

また、同一のイベントは一つのシートに一つだけです。


まったく別の方法として、F1やG1に何か図形(オートシェイプの額縁など)を
貼り付け、図形を選択し、右クリックし、マクロの登録(N)で実行したいものを
登録するなど。

【69685】Re:検索前に戻したい
発言  a  - 11/8/20(土) 21:49 -

引用なし
パスワード
   毎回ありがとうございます
本当に助かっております
ご丁寧に教えていただけたので何となくできそうな予感がしてきました
私の家にエクセルが無いので会社にいきましたらやってみます

その前にまた質問させてください
自動で表示されますのでコードを入力とありますが
そのコードというのが前回に教えていただいた長い数式?なのでしょうか?

またみつかったたび広域変数を〜とありますが
あくまで1つ前の検索のみ残っていれば問題ありません
最初にb26と検索した後にc956と検索したとします
この時にg1にb26という数字が残っていれば有難いなと思うぐらいです
クリックしてそればa1にコピーされるならもう言う事なしなのですが・・
その後にe85と検索したときにb26が消えそこにc956と記載されれば問題ないのですがそれは以前教えていただいた数式で、できるのでしょうか?;
無知すぎてすみません・・
また同じイベントはできないとの事ですが
この昨日をg1にするとf1にはできないという事でしょうか?
f1はただ押せばその数値がA1に入れば良いなと思うのですが
それも無理なのでしょうか?
質問ばかりですみません;;
ご回答いただけますと幸いです
いつもお早いお返事ありがとうございます

【69724】Re:検索前に戻したい
回答  とおりすぎ  - 11/8/24(水) 14:43 -

引用なし
パスワード
   仕事がばたばたしてて、しばらくアクセスできなかった。
しばらくは、あまりつなげないかも。

ちょっと、こちらで意図していたものと、違っているような気がしてきました。

おやりになりたいことをまとめてみた方がよろしいかと。

検索したい範囲はどこでしょうか?A2以降?

検索する文字列はA1に書かれている文字ですか?
検索条件は、部分一致・完全一致?大文字・小文字の区別は?全角・半角の区別は?

検索した後の動作は?
私のコードでは、見つかったセルに移動するようにしてましたが、どこかのセルに、
一致したセルのアドレスを記入するのですか?
続けて検索した場合、一つ前のセルのアドレスと、新しく見つかったセルのアドレスを記入?
それぞれどのセルに記入する?

>クリックしてそればa1にコピーされるならもう言う事なしなのですが・・
>f1はただ押せばその数値がA1に入れば良いなと思うのですが

A1には検索する文字列が入っているのではないのですか?

【69731】Re:検索前に戻したい
質問  a  - 11/8/25(木) 7:50 -

引用なし
パスワード
   説明不足で申し訳ございません;;
検索をかける場所はA2の場所になります;
シートは1つです
A2に文字をいれ検索します
縦はA7から下に1506までの範囲横にJまでの入力がされており
検索範囲は横ABCDが検索がかかる範囲になっております

機能はグーグルみたいな検索をA2でかけられるようになっているのですが
(普段はA7以降すべてが記載されておりますが検索をかけるとA7以降、検索該当のみが表示されるようになっております 検索は部分一致です)
そこに入力した時に000と検索後、123と検索をしたとします
123はなくなってしまうので前に調べた物がG1にでも000と記載され
クリックすると前に戻る(またはG1に戻ると書いてあり押せば戻るようになる)みたいな機能をつけてほしいといわれてしまい困っております;
またF1にもTOP(最初の検索されていない状態)に戻すような機能をつけたいのです
また最初は-と記載されており-と検索するとすべてが該当するようになっております

最初に説明不足で大変申し訳ございません
お忙しい中気にしていただきありがとうございます

お時間の許す範囲でご回答いただけますと大変ありがたいです
よろしくお願いします

【69732】Re:検索前に戻したい
回答  とおりすぎ  - 11/8/25(木) 8:52 -

引用なし
パスワード
   >機能はグーグルみたいな検索をA2でかけられるようになっているのですが
>(普段はA7以降すべてが記載されておりますが検索をかけるとA7以降、検索該当のみが表示されるようになっております 検索は部分一致です)
>そこに入力した時に000と検索後、123と検索をしたとします
>123はなくなってしまうので前に調べた物がG1にでも000と記載され
>クリックすると前に戻る(またはG1に戻ると書いてあり押せば戻るようになる)みたいな機能をつけてほしいといわれてしまい困っております;
>またF1にもTOP(最初の検索されていない状態)に戻すような機能をつけたいのです
>また最初は-と記載されており-と検索するとすべてが該当するようになっております

いまいちよく解らないが、
すでに、検索機能はできているのでしたら、それをUPしてもらえますか?
コードを見た方が早そうだ。

【69751】Re:検索前に戻したい
質問  a  - 11/8/26(金) 7:36 -

引用なし
パスワード
   お返事ありがとうございます
コードは以下になります

Option Explicit
Private Sub Worksheet_Change(ByVal target As Range)

Const wshInfoName As String = "結果"
Const CriteriaScope As String = "A1:D5"
Dim originalWord


   If target.Address(0, 0) <> "A2" Then Exit Sub
   If target.Value = "" Then Exit Sub

   Application.ScreenUpdating = False

     originalWord = Range("A1:H2").Value
     Application.EnableEvents = False

       Range("A1:D2,A3:T1506").ClearContents

       Range("A1:B1").Value = Sheets(wshInfoName).Range("A1:B1").Value
       Range("C1").Value = Sheets(wshInfoName).Range("D1").Value

       Range("A2,B3,C4").Value = "*" & originalWord(2, 1) & "*"
       Range("A2,B3,C4,D5").Value = "*" & originalWord(2, 1) & "*"

       Sheets(wshInfoName).Columns("A:T").AdvancedFilter Action:=xlFilterCopy, _
       CriteriaRange:=Sheets("検索").Range(CriteriaScope), CopyToRange:=Range("A6"), Unique:=False

       Range("A1:H2").Value = originalWord
       Range("A3:D5").ClearContents

       Columns("A:T").EntireColumn.AutoFit
       ActiveWindow.FreezePanes = False
       Rows("7:7").Select
       ActiveWindow.FreezePanes = True
       Application.GoTo Reference:="R6C1"
       Rows("7:1500").RowHeight = 18.75

       If Range("A7").Value <> "" And Range("A8").Value = "" Then
         Call pickUpOneLine(Range("A7"))
       End If

       Range("A2").Select

     Application.EnableEvents = True

   Application.ScreenUpdating = True

End Sub

Sub disappear()
   Me.Pictures.Delete
End Sub


Private Sub Worksheet_SelectionChange(ByVal target As Range)
   Call pickUpOneLine(target)
End Sub

Private Sub pickUpOneLine(ByVal target As Range)
Dim rngToReact As Range
Dim rngForPhoto As Range
Dim cel As Range
Dim NN As Long
Dim strPath As String
Dim Fname As String

   disappear

   If target.Count > 1 Then Exit Sub
   If target.Value = "" Then Exit Sub

   Set rngToReact = Range("A7:J1506")
   Set rngForPhoto = Range("C4:G5")

   If Not Intersect(target, rngToReact) Is Nothing Then
     Application.EnableEvents = False

       Range("A3:H3").Value = target.EntireRow.Range("A1:H1").Value
       Range("A4:G4").Value = target.EntireRow.Range("I1:O1").Value
       Range("C5:F5").Value = target.EntireRow.Range("P1:T1").Value

       Columns("A:T").EntireColumn.AutoFit


       strPath = ThisWorkbook.Path & "\" & Range("A4").Value _
             & IIf(Range("B4").Value = "", "\", "\" & Range("B4").Value & "\")
       NN = 1
       For Each cel In rngForPhoto
         If cel.Value <> "" Then
           cel.Value = strPath & cel.Value
           cel.NumberFormatLocal = ";;;" & """画像" & NN & """"
           NN = NN + 1
         End If
       Next
         rngForPhoto.Font.Underline = xlUnderlineStyleSingle
         rngForPhoto.Font.ColorIndex = 5

     Application.EnableEvents = True

   ElseIf Not Intersect(target, rngForPhoto) Is Nothing Then
     Call photoShow(target)

   End If

End Sub

Private Sub photoShow(ByVal target As Range)
Dim OrgWidth As Double
Dim OrgHeight As Double
Dim ratio As Double

   On Error GoTo photoNone
     Me.Pictures.Insert (target.Value)
   On Error GoTo 0

   With Me.Pictures(Me.Pictures.Count)

     OrgWidth = .Width
     OrgHeight = .Height

    .Height = Range("C7:C20").Height

    .Width = OrgWidth * .Height / OrgHeight

     .Top = Cells(7, 1).Top
     .Left = Cells(7, 3).Left
     .OnAction = Me.CodeName & ".disappear"
   End With
   Exit Sub

photoNone:
   MsgBox "対応画像なし"
End Sub

これがすべてです
あまり良くないと思うので(会社的)通りすがりさんが見られたらこのコードは消させていただきます;;
小心者ですみません;;
お忙しい中大変申し訳ございません
相談できる相手もいなく、大変困っておりましたので
本当に有難い限りです
お返事いただけますと幸いです
よろしくお願いします

【69753】Re:検索前に戻したい
回答  とおりすぎ  - 11/8/26(金) 10:26 -

引用なし
パスワード
   コード拝見しました。
思っていたのとぜんぜん違っていました。

A1:H2の値をとっておいて、一回セルをクリアしてから、A1、B1、C1に
結果シートから移し、A2、B3、C4、D5にA2の値(*付き)を入れ、
検索シートのA1:D5の条件で、A6以下に結果シートから、フィルタオプション
の設定で抽出する。
ウインドウ枠の固定やセル幅、高さなどを整えた後に、画像を挿入。

と言ったことをやっておられてるかと思いますが、セルをいったんクリア
してるので、元に戻すには、別のシートにでも取っておき、必要なときに
それを読みに行くと言った方法になると思います。

はじめの方の
Range("A1:D2,A3:T1506").ClearContents
でセルの値を消しているので、その前に、

Sheets("別のシート").Range("A1:D2").value=Range("A1:D2").value
Sheets("別のシート").Range("A3:T1506").value=Range("A3:T1506").value

として、別のシートに値を移しておいて、必要なときに、

Range("A1:D2").Value = Sheets("別のシート").Range("A1:D2").Value
Range("A3:T1506").Value = Sheets("別のシート").Range("A3:T1506").Value

で元に戻すことになる。

【69755】Re:検索前に戻したい
質問  a  - 11/8/26(金) 12:32 -

引用なし
パスワード
   早速ありがとうございます!
大変助かりました
過去暦を別シートへコピーするというやり方でしょうか?
ご質問なのですがコピーはされてるのですが

A6以降の文字はどこから反映させているのでしょうか?
検索結果と違うようでしたので
教えていただけますと幸いです
こういう形で残すのはとても良いと思いました^^
ありがとうございます
またTOPへのやり方はないでしょうか?;;
質問ばかり申し訳ございません

はじめにコードをお伝えすべきでしたね;;説明不足申し訳ございませんでした
自分のイメージしていた方向へ進んでいっているので有難いです
結果を残す方法以外
戻るという方法やTOPへの方法はこのマクロだと難しいということでしょうか?

本当にありがとうございます
もう少々お付き合いいただけますと幸いです
ありがとうございます
今日の午後15時頃先ほどのコードは消させていただきます
ご了承ください;;
すみません

【69757】Re:検索前に戻したい
回答  とおりすぎ  - 11/8/26(金) 15:12 -

引用なし
パスワード
   TOPに戻るとはどういった状態なのでしょうか?
最初にBookを開いたときの状態?

とりあえず、一つ前に戻る動作の方ですが、
全体を取っておくより、A2の値をとっておき、検索しなおす方が
楽かと考え直して見ました。

Option Explicit 'の次の行に
Private myReDO As Variant 'と記述し、

Private Sub Worksheet_Change(ByVal target As Range)

Const wshInfoName As String = "結果"
Const CriteriaScope As String = "A1:D5"
Dim originalWord


   If target.Address(0, 0) <> "A2" Then Exit Sub
   If target.Value = "" Then Exit Sub

   myRedo = Target.Value 'この辺で変数に取っておく。
   Application.ScreenUpdating = False
   :
   :

'SelectionChangeイベントに追加
Private Sub Worksheet_SelectionChange(ByVal target As Range)
   If target.Address = "$F$1" Then '一つ前
     If Len(myReDO) > 0 Then '変数が空でなかったら
       Me.Range("A2").Value = myReDO 'A2に変数の値を入れる。
                      'Changeイベントが働き、検索。
     End If
   ElseIf target.Address = "$G$1" Then
     'ここにTopへ戻るコード
   Else
     Call pickUpOneLine(target)
   End If
End Sub

【69758】Re:検索前に戻したい
質問  a  - 11/8/26(金) 15:45 -

引用なし
パスワード
   お返事ありがとうございます
最初に教えていただいた方の結果は以下

あの後に使用してみたのですが別シート=検索2としています
にコピー?された状態にはなったのですが
検索の場所で78と入力しますと検索2にも78と記載されました
が05と次に検索をかけますと検索2も05となってしまいました
過去(1つ前の履歴)を残しておきたいので、次に05と検索しても78と残って欲しいのです
その次に06と検索した場合05というのが残って欲しいのですが
やはりそれは難しいのでしょうか?

2つ教えていただいたコードは2つとも指定された場所に続けて入力しております
       Sheets("検索2").Range("A1:D2").Value = Range("A1:D2").Value
       Sheets("検索2").Range("A3:T1506").Value = Range("A3:T1506").Value
       Range("A1:D2").Value = Sheets("検索2").Range("A1:D2").Value
       Range("A3:T1506").Value = Sheets("検索2").Range("A3:T1506").Value
       Range("A1:D2,A3:T1506").ClearContents 
これで間違えないですか?
または配置場所がまずいのでしょうか?

2つめに教えていただいたコードはトップへ戻るのコードとはすみません
わからない状態なのですが・・・
それがないと起動してくれないみたいで教えていただいたのに完成していなく
どう動くのかがわからない状態です;
何から何まで申し訳ございません;;

topに戻るようにしたいとは
-を入れると最初の状態に戻るように設定されております
最初に開いた状態に戻して欲しいとの事でした
何も検索されていない状態(-)で検索されている状態です
こちらはやはり難しいのでしょうか;
お忙しい中、たびたび気にしていただきありがとうございます;
説明が下手で申し訳ございません
よろしくお願いします

【69759】Re:検索前に戻したい
回答  とおりすぎ  - 11/8/26(金) 16:34 -

引用なし
パスワード
   Bookを開いたときに別シート(検索2)に保存しておく。

何回か適当に検索した後、F1やG1をクリック。

Option Explicit
Private myReDO As Variant
Private Sub Worksheet_Change(ByVal target As Range)

Const wshInfoName As String = "結果"
Const CriteriaScope As String = "A1:D5"
Dim originalWord


   If target.Address(0, 0) <> "A2" Then Exit Sub
   If target.Value = "" Then Exit Sub

   Application.ScreenUpdating = False
   myRedo = Target.Value

     originalWord = Range("A1:H2").Value
     Application.EnableEvents = False

       Range("A1:D2,A3:T1506").ClearContents

       Range("A1:B1").Value = Sheets(wshInfoName).Range("A1:B1").Value
       Range("C1").Value = Sheets(wshInfoName).Range("D1").Value

       Range("A2,B3,C4").Value = "*" & originalWord(2, 1) & "*"
       Range("A2,B3,C4,D5").Value = "*" & originalWord(2, 1) & "*"

       Sheets(wshInfoName).Columns("A:T").AdvancedFilter Action:=xlFilterCopy, _
       CriteriaRange:=Sheets("検索").Range(CriteriaScope), CopyToRange:=Range("A6"), Unique:=False

       Range("A1:H2").Value = originalWord
       Range("A3:D5").ClearContents

       Columns("A:T").EntireColumn.AutoFit
       ActiveWindow.FreezePanes = False
       Rows("7:7").Select
       ActiveWindow.FreezePanes = True
       Application.GoTo Reference:="R6C1"
       Rows("7:1500").RowHeight = 18.75

       If Range("A7").Value <> "" And Range("A8").Value = "" Then
         Call pickUpOneLine(Range("A7"))
       End If

       Range("A2").Select

     Application.EnableEvents = True

   Application.ScreenUpdating = True

End Sub

Sub disappear()
   Me.Pictures.Delete
End Sub


Private Sub Worksheet_SelectionChange(ByVal target As Range)
   If target.Address = "$F$1" Then '一つ前
     If Len(myReDO) > 0 Then '変数が空でなかったら
       Me.Range("A2").Value = myReDO 'A2に変数の値を入れる。
                      'Changeイベントが働き、検索。
     End If
   ElseIf target.Address = "$G$1" Then
     Sheets("検索2").Cells.Copy Me.Cells(1)
   Else
     Call pickUpOneLine(target)
   End If
End Sub

Private Sub pickUpOneLine(ByVal target As Range)
Dim rngToReact As Range
Dim rngForPhoto As Range
Dim cel As Range
Dim NN As Long
Dim strPath As String
Dim Fname As String

   disappear

   If target.Count > 1 Then Exit Sub
   If target.Value = "" Then Exit Sub

   Set rngToReact = Range("A7:J1506")
   Set rngForPhoto = Range("C4:G5")

   If Not Intersect(target, rngToReact) Is Nothing Then
     Application.EnableEvents = False

       Range("A3:H3").Value = target.EntireRow.Range("A1:H1").Value
       Range("A4:G4").Value = target.EntireRow.Range("I1:O1").Value
       Range("C5:F5").Value = target.EntireRow.Range("P1:T1").Value

       Columns("A:T").EntireColumn.AutoFit


       strPath = ThisWorkbook.Path & "\" & Range("A4").Value _
             & IIf(Range("B4").Value = "", "\", "\" & Range("B4").Value & "\")
       NN = 1
       For Each cel In rngForPhoto
         If cel.Value <> "" Then
           cel.Value = strPath & cel.Value
           cel.NumberFormatLocal = ";;;" & """画像" & NN & """"
           NN = NN + 1
         End If
       Next
         rngForPhoto.Font.Underline = xlUnderlineStyleSingle
         rngForPhoto.Font.ColorIndex = 5

     Application.EnableEvents = True

   ElseIf Not Intersect(target, rngForPhoto) Is Nothing Then
     Call photoShow(target)

   End If

End Sub

Private Sub photoShow(ByVal target As Range)
Dim OrgWidth As Double
Dim OrgHeight As Double
Dim ratio As Double

   On Error GoTo photoNone
     Me.Pictures.Insert (target.Value)
   On Error GoTo 0

   With Me.Pictures(Me.Pictures.Count)

     OrgWidth = .Width
     OrgHeight = .Height

    .Height = Range("C7:C20").Height

    .Width = OrgWidth * .Height / OrgHeight

     .Top = Cells(7, 1).Top
     .Left = Cells(7, 3).Left
     .OnAction = Me.CodeName & ".disappear"
   End With
   Exit Sub

photoNone:
   MsgBox "対応画像なし"
End Sub


'****ThisworkBookモジュール****
Private Sub Workbook_Open()
 Sheets("検索2").Cells.Copy Sheets("検索?").Cells(1) 'シート名は適当
End Sub

【69762】Re:検索前に戻したい
発言  a  - 11/8/26(金) 23:44 -

引用なし
パスワード
   お返事ありがとうございます^^
コードを教えていただく形になり大変申し訳ない限りです;;
以前お伝えした通り、私のPCはエクセルが入っていないため
月曜日の朝一に試してみる形になりますので
急いで教えていただいたのに
使用してみる事ができなく大変申し訳ございません・・・・

本当にありがとうございます

またご質問なのですが
最初の状態のものを別シートに作り、それを呼び出すという事でしょうか?
また最後の方の検索?というのはその最初の状態のシート名という理解で間違いないでしょうか?

今すぐにでも試したみたい気持ちなのに大変残念に思います
本当にありがとうございます
月曜日の朝一が楽しみです
その後、どんな形でもまたご報告させていただきます
お忙しい中、本当に助かりました

またコードを消しますと言っていたのですが
消せない状態になってしまいました
(何故消さないの?という疑問をもたれたときの為に念の為)
残念ですがこれは仕方ないと思います

【69775】Re:検索前に戻したい
質問  a  - 11/8/29(月) 7:39 -

引用なし
パスワード
   おはようございます
早速教えていただいたコードを入力しやってみました
見事にG1の場所をクリックするとTOPへ戻ることができました^^
ありがとうございます
ですがG1はTOPへ戻ることができたのですがF1は何の機能もしませんでした
ちなみに私が検索をかけてるシート名を検索とし
コピーを検索2としていますが
一番下の検索?は?をとって検索で使用しています
検索3も作ってみて?を3にしたのですが何の変化もありませんでした
戻るへのボタンにつきましてはどうすれば機能するのでしょうか?;
教えていただけますと幸いです

どちらにしろTOPはでき本当にありがとうございます
こんな方法もあったのですね
ありがとうございます

【69776】Re:検索前に戻したい
回答  とおりすぎ  - 11/8/29(月) 10:02 -

引用なし
パスワード
   Changeイベントを下記に置き換え。

Private Sub Worksheet_Change(ByVal Target As Range)

  Const wshInfoName As String = "結果"
  Const CriteriaScope As String = "A1:D5"
  Dim originalWord
  Dim BufWord As String

  If Target.Address(0, 0) <> "A2" Then Exit Sub
  If Target.Value = "" Then Exit Sub

  Application.ScreenUpdating = False

  Application.EnableEvents = False
  originalWord = Range("A1:H2").Value
  BufWord = Target.Value
  Application.Undo
  myRedo = Target.Value
  Target.Value = BufWord
  
  Range("A1:D2,A3:T1506").ClearContents

  Range("A1:B1").Value = Sheets(wshInfoName).Range("A1:B1").Value
  Range("C1").Value = Sheets(wshInfoName).Range("D1").Value

  Range("A2,B3,C4").Value = "*" & originalWord(2, 1) & "*"
  Range("A2,B3,C4,D5").Value = "*" & originalWord(2, 1) & "*"

  Sheets(wshInfoName).Columns("A:T").AdvancedFilter Action:=xlFilterCopy, _
  CriteriaRange:=Sheets("検索").Range(CriteriaScope), CopyToRange:=Range("A6"), Unique:=False

  Range("A1:H2").Value = originalWord
  Range("A3:D5").ClearContents

  Columns("A:T").EntireColumn.AutoFit
  ActiveWindow.FreezePanes = False
  Rows("7:7").Select
  ActiveWindow.FreezePanes = True
  Application.GoTo Reference:="R6C1"
  Rows("7:1500").RowHeight = 18.75

  If Range("A7").Value <> "" And Range("A8").Value = "" Then
    Call pickUpOneLine(Range("A7"))
  End If

  Range("A2").Select

  Application.EnableEvents = True
  Application.ScreenUpdating = True

End Sub

【69778】Re:検索前に戻したい
質問  a  - 11/8/29(月) 12:16 -

引用なし
パスワード
   早速のご回答ありがとうございます
長々とすみません;;;
 早速やらせていただいたのですが
Undoメソッドは失敗しましたと表示され
Application.undo の所が黄色くなりました;;
これは何かのエラーなのでしょうか?;;

質問ばかり申し訳ございません・・

【69785】Re:検索前に戻したい
回答  とおりすぎ  - 11/8/29(月) 14:28 -

引用なし
パスワード
   エラートラップを入れておく。

  Application.Undo
  myRedo = Target.Value
  Target.Value = BufWord
   ↓
  On Error Resume Next
  Application.Undo
  If Err.Number = 0 Then
    myRedo = Target.Value
    Target.Value = BufWord
  End If
  On Error Goto 0

ちなみに、動作確認は一切してません。

【69787】Re:検索前に戻したい
お礼  a  - 11/8/29(月) 14:42 -

引用なし
パスワード
   お返事ありがとうございます
思っていたとおりにできました
理想の状態でございます
本当にありがとうございます
ご迷惑を多々おかけしました
本当にうれしい限りでございます

一人でしたらできませんでした
何日にもかけ、何週にもかけありがとうございました
もう感謝の言葉でいっぱいです
ありがとうございます
また不明な点がごさいましたらご質問に来るかと思います
その際はまたお願いできればと思います
本当にありがとうございました

この機能を大切に使わせていただきたく思います
ありがとうございました
とおりすがりさんにご回答頂き、幸せです
ありがとうございました

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