12.[337]マクロ進行をコマンドボタンに表示する [2000/01/31 K.Jさんからの質問]
オリジナル337のマクロのことでお聞きしたいんですが。 このマクロはマクロが 実行中に表示されると思うんですが 自分で作成したマクロの中で、保存、又は 上書きするマクロの所に、追加する形でコピーしたのですが。 マクロが実行されている間表示されず。サンプルと同じ時間しか表示できません。 調整は出来るもんなのでしょうか? それとも、やり方がおかしいのでしょうか? 又、下記の文面がありましたが、マクロ名はこの式のどの部分に入れればよいの でしょうか?。よろしくお願いします。

どうも説明が不足していたようで申し訳ありますん。「337」のサンプルは (「333」も同様)、"For i=" の変数"i"の進行を表示するものです。したがって 保存、又は上書マクロの進行は表示できますん。実際のマクロを下記のように 入れれば進捗が表示されます。

cend = 1500 '(最終値:1500はデバック用)

'-----------------------------------------------------
'デバッグ用タイミング(実際はここに実行マクロを入れる) |
          For j = 1 To 5000: Next '                 |
'-----------------------------------------------------
上記は実際のマクロは無く表示を遅くするためタイミングを入れただけ。

下記は50行までに、1〜99のランダム数字を入れセルに色付けするマクロ。

cend = 50 '(最終値:50はデバック用)

'-----------------------------------------------------
'実際はここに実行マクロを入れる
'(実際のマクロとは、変数"i"を使用し処理するマクロの事)
'例:
     For j = 1 To 26
        Cells(i, j) = Int((99 - 1 + 1) * Rnd + 1)
        Cells(i, j).Interior.ColorIndex = Cells(i, j) Mod 10
     Next
'-----------------------------------------------------
上記のマクロを実行すると、下図となる。

13.[019]フォルダ名とファイル名を取得する [2000/02/10 I.Sさんからの質問]
突然ですが、初めて、メールさせていただきます。 本題ですが、500連発に掲載されていた。 「フォルダ名とファイル名を取得する」で、コピー、移動、削除、 名前の変更をする場合のプログラムを教えていただけないでしょうか。 そういうプログラムが存在するのなら、送っていただきたいのですが、 よろしいでしょうか?よろしくお願いします。
私のHPのトップペ−ジに「KIcopy2000」と言う項目がありますが、 そこからジャンプすると、コピー、移動、削除、名前の変更が出来る サンプルがあり、ダウンロ−ド出来ます。

かなり便利なソフト(マクロ)で私自身よく使用しています。そのうち シェアウエアにしようと思っているので無料で使用したい方は早めに ダウンロ−ドして下さい。なお、このサンプルに関する意見・要望は 一度もきていないが、もし何かあれば連絡して頂ければ可能な限り 折込みバ−ジョンアップします。

14.[294]A列とB列を比較する [2000/02/25 M.Kさんからの質問]
初めまして、500連発を購入したものですが、1つ質問があります。 294番のA列とB列の比較を利用して、同ブック内別シートと比較し ようとしました。しかし、戻り値が全て『0』になります。 良い解決方法があったら教えて下さい。よろしくお願い致します。

自分の担当分ではないが質問が来たので返答します。ただし500連発の 294番はワ−クシ−ト関数を使用しているようですが、自分の出した マクロでないので内容を確認していません。私のHPの14−31項にも 類似品がるので、それを少し変えFindメソッドで書きました。

・Sheet1のA列デ−タをキ−ワ−ドに
・Sheet2のA列に同じデ−タがあれば
・Sheet2のC列へその内容を貼り付ける
・なお、同じデ−タが無い場合はその内容をE列へ貼り付けました。

Sub find()
Dim actv As Object
Dim i As Integer, endr1 As Integer, endr2 As Integer
Dim keym As String

Application.ScreenUpdating = False
 Sheets("Sheet1").Select
 Selection.SpecialCells(xlCellTypeLastCell).Select
 endr1 = ActiveCell.Row
 
 Sheets("Sheet2").Select
 Selection.SpecialCells(xlCellTypeLastCell).Select
 endr2 = ActiveCell.Row
 
    c1 = 1: c2 = 1
For i = 1 To endr1
Sheets("Sheet1").Select
    keym = Cells(i, 1)
    Sheets("Sheet2").Select

    Set actv = Range(Cells(1, 1), Cells(endr2, 1)) _
     .find(keym, , , xlWhole, xlByColumns, xlNext, False)
    If actv Is Nothing Then
          Cells(c2, 5) = keym
          c2 = c2 + 1
    Else
          Cells(c1, 3) = keym
          c1 = c1 + 1
    End If
Next
End Sub
上記マクロで問題があれば再度メ−ルを下さい。
15.[444]指定したグラフのサイズを変更したい [2001/01/10 K.Mさんからの質問]
初めまして、 「技術評論社」の「ExcelVBAマクロ500連発」を見ながら ただ今Excelマクロの勉強中のものです。 グラフ関係のマクロに関して、ご質問をしてよろしいでしょうか。

自分のやりたいことは、埋込みグラフのサイズを変更したいのです。 ただし、1つのシート上に幾つか埋込みグラフがあり、マウスで 選択しているグラフ(1つずつ)のみのサイズが変更したいのです。

「435」のグラフ名の取得と「444」のグラフの大きさを指定する を応用して、変更しようかと、いろいろ試したのですが、 私の知識では解決が出来ませんでした。 選択しているグラフ(ActiveChart)の名前が取得できれば 良いのではと考えたのですが(Excel2000)。
・下記マクロで実行できます。グラフ名はInStr(1, ggg1, "グ", 1) でOKです。なお、本例の場合グラフを選択してからマクロMacro1()を 実行して下さい。

・Excel2000ではユーザーフォームから実行も可能です やり方については、私のHPの27-1(3)[2]を参照のこと
またグラフ名指定にていては、サンプル2000の[17]も参考になります。

Sub Macro1()
' グラフ名
   On Error Resume Next
   ggg1 = ActiveChart.Name
   ggg2 = Mid(ggg1, InStr(1, ggg1, "グ", 1))
   If Err > 0 Then
       MsgBox "グラフを選んでから実行して下さい"
       On Error GoTo 0
       Exit Sub
    End If
       On Error GoTo 0

'現在のサイズ
   hei = ActiveSheet.ChartObjects(ggg2).Chart.ChartArea.Height
   wid = ActiveSheet.ChartObjects(ggg2).Chart.ChartArea.Width
                 
 msg = "現在のサイズは、縦:" & hei & "  横幅:" & wid & "です" & Chr$(10) _
    & " 拡大する倍率を入力して下さい"
  bai = Application.InputBox(msg, "グラフを指定", "1", Type:=1)
    If bai = "" Then
        MsgBox "拡大倍率が力されていません"
        Exit Sub
    End If
'サイズ変更
ActiveSheet.ChartObjects(ggg2).Activate
    ActiveChart.ChartArea.Select
    ActiveSheet.Shapes(ggg2).ScaleWidth bai, msoFalse, msoScaleFromTopLeft
    ActiveSheet.Shapes(ggg2).ScaleHeight bai, msoFalse, msoScaleFromTopLeft

    Range("A2").Select
End Sub

16.[294]A列とB列を比較する(シート間のマッチング処理) [2003/07/19 (土) 16:41 H.Sさんからの質問]
500連発の294番を参考にして、シート(以下では「入力シート」、 「参照シート」と称しています)を合成したいのですが、入力シート(AからE 列)、参照シート(AからH列)で両方のA列にキーであって、キーが一致するもの は、入力シート(最後列)のF列からL列に、参照シートのBからH列を貼り付ける ようにしたいのですが、修正箇所、修正方法がなかなか難しくてうまくいきません。 (なお、マッチしないものは何も処理しません。)
 大変厚かましいお願いなのですが、できましたらアドバイスを頂けないでしょう か。サンプルデータもお送りしますので、なにとぞよろしくお願いします。




500連発の294番は私の出したマクロサンプルでないので その詳細については回答出来ません。
但し、2個のシートのキーワード検索は、HPの10−2項に 紹介してある方法で簡単に出来るので紹介します。
また、AdvancedFilterで時間が掛かる場合は、tst2のFindで 行なって下さい
(2年程前に同じような質問があったのを忘れており14項とダブリ掲載)
※ 使用結果のメールを頂きましたがtst1:4分、tst2:3分50秒との事だった。(結論:時間は同じくらい)

Dim myrang1 As Range
Dim myrang2 As Range
Sub tst1()
Application.ScreenUpdating = False
'入力シートの最終セル
    Sheets("入力シート").Select
    Range("A1").Select
        Selection.CurrentRegion.Select
        cen1 = Selection.Rows.Count
    Range("A1").Select
'ファイル2の最終セル
  Sheets("参照シート").Select
  Range("A1").Select
    Selection.CurrentRegion.Select
    cen2 = Selection.Rows.Count
  Range("A1").Select

' 検索条件セット/出力箇所
    Sheets("参照シート").Select
        Cells(1, 11) = "番号1"   '検索アイテム
        
        Range("B1:H1").Select   '検索結果
        Selection.Copy
        Cells(5, 11).Select
        ActiveSheet.Paste
        Range("I10").Select
    Set myrang1 = Range(Cells(5, 11), Cells(6, 17))
    Set myrang2 = Range(Cells(6, 11), Cells(6, 17))

For i = 2 To cen1
     Application.StatusBar = "検索中---" & i & " / " & cen2
'審判番号を変数へ
      Sheets("入力シート").Select
        bangou = Cells(i, 1)

' データ検索スタ−ト
       Sheets("参照シート").Select
'前データクリアー
           Cells(6, 11) = ""
'検索デ−タセット
        Cells(2, 11) = bangou
'抽出実行
       Range(Cells(1, 1), Cells(cen2, 8)).AdvancedFilter Action:=xlFilterCopy, _
       CriteriaRange:=Range("K1:K2"), _
       CopyToRange:=myrang1, Unique:=False
'貼り付けデ−タを変数へ
    If Cells(6, 11) <> "" Then
       myrang2.Select
       Selection.Copy
       Range("a1").Select

'デ−タ貼り付け
     Sheets("入力シート").Select
        Cells(i, 6).Select
        ActiveSheet.Paste
    End If
Next
'終了処理
Application.ScreenUpdating = True
Sheets("参照シート").Select
    Columns("K:Q").Select
    Selection.Delete Shift:=xlToLeft
    Range("a1").Select
    
    Sheets("入力シート").Select
    Range("a1").Select
End Sub

' -----------------------------------------------------------
Dim dat() As String
Dim myrang1 As Range
Sub tst2()
Application.ScreenUpdating = False
'入力シートの最終セル
    Sheets("入力シート").Select
    Range("A1").Select
        Selection.CurrentRegion.Select
        cen1 = Selection.Rows.Count
    Range("A1").Select
    Set myrang1 = Range(Cells(1, 1), Cells(cen1, 1))
'参照シート最終セル
  Sheets("参照シート").Select
  Range("A1").Select
    Selection.CurrentRegion.Select
    cen2 = Selection.Rows.Count
  Range("A1").Select
  
'キーワードを配列に代入
ReDim dat(cen2)
   For i = 2 To cen2
       dat(i) = Cells(i, 1)
   Next
'キーワードチェック
Sheets("入力シート").Select
For i = 2 To cen2
    Application.StatusBar = msg & "---- " & i & "/" & cen2
    
    Set actv = myrang1.Find(dat(i), , , xlWhole, xlByColumns, xlNext, False)
        If actv Is Nothing Then
               'データ無しを処理する場合ここに記述
        Else
            actv.Select
            ra = ActiveCell.Row
            Cells(ra, 6) = Sheets("参照シート").Cells(i, 2)
            Cells(ra, 7) = Sheets("参照シート").Cells(i, 3)
            Cells(ra, 8) = Sheets("参照シート").Cells(i, 4)
            Cells(ra, 9) = Sheets("参照シート").Cells(i, 5)
            Cells(ra, 10) = Sheets("参照シート").Cells(i, 6)
            Cells(ra, 11) = Sheets("参照シート").Cells(i, 7)
            Cells(ra, 12) = Sheets("参照シート").Cells(i, 8)
        End If
Next

Application.ScreenUpdating = True
End Sub

【戻る】