目安箱 IV

目安箱投稿のルールはこちらをごらんください。
ご意見は電子メールで承っています。
「目安箱」は質問禁止です。技術的な質問はそれぞれの質問箱へどうぞ。

迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。

  新規投稿 ┃ツリー表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃ホーム  
69 / 277 ←次へ | 前へ→

【223】4.0マクロについて
Excel  Jaka  - 07/12/26(水) 14:21 -

引用なし
パスワード
   もう少しまとめてからと思いましたが、よく解らないし面倒になってきたので、前にここに載せて消した時とほとんど変わってません。
1度で掲載できないので(10000文字制限、未満でも撥ねられた)2度に分けます。

--------------------
今更って感じもするし、これで何ができるのか良く解りませが、
興味本位で、自分なりに調べてわかったような範囲内での、実に中途半端なものを載せてみます。
あまりまとまっていませんが...。
使う用途は無いと思いますけどね。

4.0マクロって、EXCEL5.0、EXL95のマクロの書き方だと思ってました。
EXCEL5.0のマニュアルは、手元にあってたまに見ているのに、4.0マクロの事が載ってない手抜きマニュアルだ〜、って思っていたから、余計に気づかずにいました。
EXCEL95のマニュアルにも4.0マクロの書き方は載ってなかったような。
5.0も95も今と同じような書き方で、Subがあって、Functionもあります。


参考URL

EXCEL 4.0 マクロについて
ht tp://www.jp-ia.com/ans/file95.html

インストラクターのネタ帳
ht tp://www.relief.jp/itnote/archives/001370.php

マクロを使おう - SELECT 関数
ht tp://support.microsoft.com/default.aspx?scid=kb;ja;410566

マクロを使おう - EXEC 関数
ht tp://support.microsoft.com/default.aspx?scid=kb;ja;410602

マクロを使おう- GET.CELL 関数の応用
ht tp://support.microsoft.com/default.aspx?scid=kb;ja;410576

マクロを使おう − INPUT 関数
ht tp://support.microsoft.com/default.aspx?scid=kb;ja;410556
(ここに書いてあるGOTO文使用の例は、中途半端な説明の為、エラーになって動かない。)

マクロを使おう - FORMULA 関数
ht tp://support.microsoft.com/default.aspx?scid=kb;ja;410481

ここのエクセル質問箱
ht tp://www.vbalab.net/vbaqa/c-board.cgi?page=&no=49560&mode=ntr&id=excel&cmd=jmp

今頃、ここ↑を解析してみてRecord1って、マクロ記録1って事じゃん。って気づきました。
確か、Macのクラリスワークスのマクロ記録もこんな題名で記録されていたような...。
このマクロ記録コードがどこにあるのか見つけられなかったので、編集も何もできませんでした。
コードがあるのかも不明ですが。


コードを書く場所は、マクロシート。
マクロシートは、
Ctrl + F11 か、
Ctrlを押しながら、シートタブ → 挿入 → Excel4.0マクロ
で、作れます。

4.0マクロの実行方法
1、4.0マクロを書いた先頭のセル(プログラム名を書いた方がわかりやすい)、
  A1だったらA1セル、A20だったらA20セルを選択して、
  ツール → マクロ → マクロ から実行する。

2、マクロの先頭セルを右クリック → マクロの実行 でも、
  上と同じマクロの選択ダイアログが表示されます。

3、ボタンからマクロを実行させる場合
  標準モジュール等を使うので、4.0マクロの意味がなくなる感じもしなくはないですが。
  標準モジュールに下記コードを記載後、シートのボタンかツールバーのボタンににマクロ登録。
  (マクロ記録参考)

-----------------
Sub 実行1()
  Application.Run ThisWorkbook.Sheets("Macro1").Range("A1")
End Sub
-----------------

実行したいマクロの先頭セルを選択して実行する場合。
-----------------
Sub 実行2()
  Application.Run ActiveCell
End Sub
-----------------


1、
●メッセージボックスを表示させる。
(なぜ1番初めにメッセージボックスかと言うと、例として結果を表示するために使うから。)

以下のコードをマクロシートA1:A3に。
---------------
マクロ名
=ALERT("あああああ",3)
=RETURN()
---------------

上記コードの実行の仕方(手動)
A1セル(任意につけたマクロ名のところ)を選択して、
ツール → マクロ → マクロ を開くと、
マクロ名に「A1」と表示されてますから、そのまま実行。

B5セルの値を表示させる場合
=ALERT(B5,3)


引数(MsgBoxに当てはめると)
1 = vbInformation + vbOKCancel
2 = vbInformation + vbOKOnly
3 = vbExclamation + vbOKOnly


2、
●シート(Sheet1)の選択

=ACTIVATE("Sheet1")


3、
●Book1のアクティブシートの次のシートを選択

=ACTIVATE.NEXT("Book1")


4、
●次のウィンドウを選択。
次のウィンドウがないと無反応。(開いているブックが2つ以上で使用)

=ACTIVATE.NEXT()


5、
●アクティブセルの行

=ROW(ACTIVE.CELL())

---------------
=ALERT(ROW(ACTIVE.CELL()),2)
=RETURN()
---------------
変数使用
=SET.NAME("変数",ROW(ACTIVE.CELL()))
=ALERT(変数,2)
=RETURN()
---------------

※こういった書き方でも変数として使えるみたいです。
変数=ROW(ACTIVE.CELL())

直接セルを参照させた使用例。(A5:A8に書いたとして)
---------------
マクロ名
=ROW(ACTIVE.CELL())
=ALERT(A6,2)
=RETURN()
---------------


6、
●アクティブセルの列

=COLUMN(ACTIVE.CELL())

---------------
=SET.NAME("変数",COLUMN(ACTIVE.CELL()))
=ALERT(変数,2)
=RETURN()
---------------


7、
●アクティブブック名の取得

---------------
アクティブブック名1
=SET.NAME("BK",GET.DOCUMENT(88))
=ALERT(BK,2)
=RETURN()
---------------
アクティブブック名2
=SET.NAME("BK",GET.CELL(32))
=SET.NAME("BK",MID(BK,2,FIND("]",BK,1)-2))
=ALERT(BK,2)
=RETURN()
---------------
アクティブブック名3
=SET.NAME("BK",GET.DOCUMENT(1))
=SET.NAME("BK",MID(BK,2,FIND("]",BK,1)-2))
=ALERT(BK,2)
=RETURN()
---------------


8、
●アクティブシート名の取得

---------------
アクティブシート名1
=SET.NAME("SH",GET.CELL(32))
=SET.NAME("SH",MID(SH,FIND("]",SH,1)+1,LEN(SH)))
=ALERT(SH,2)
=RETURN()
---------------
アクティブシート名2
=SET.NAME("SH",GET.DOCUMENT(1))
=SET.NAME("SH",MID(SH,FIND("]",SH,1)+1,LEN(SH)))
=ALERT(SH,2)
=RETURN()
---------------


9、
●ブックのパス

---------------
=SET.NAME("PS",GET.DOCUMENT(2))
=ALERT(PS,2)
=RETURN()
---------------


●IF文

---------------A1:A5
IF文1
=SET.NAME("変数",11)
=IF(変数>10,"10より大","10より小")
=ALERT(A3,2)
=RETURN()
---------------
IF文2
=SET.NAME("変数",10)
=IF(変数>10)
=  SET.NAME("比較","10より大")
=ELSE()
=  SET.NAME("比較","10以下")
=END.IF()
=ALERT(比較,2)
=RETURN()
---------------
IF文入れ子
=SET.NAME("変数",10)
=IF(変数>10)
=  SET.NAME("比較","10より大")
=ELSE()
=  IF(変数<10)
=   SET.NAME("比較","10より小")
=  ELSE()
=   SET.NAME("比較","10と同じ")
=  END.IF()
=END.IF()
=ALERT(比較,2)
=RETURN()
---------------
IF文ELSEIF
変数=10
=IF(変数>10)
  比較="10より大"
=ELSE.IF(変数<10)
  比較="10より小"
=ELSE()
  比較="10と同じ"
=END.IF()
=ALERT(比較,2)
=RETURN()
---------------


10、
●インプットボックス

=INPUT("入力してください。"&CHAR(13) &CHAR(13) & "例:あいうえお",3,"タイトル")

INPUTボックスの
"例:あいうえお",3,"タイトル"
        ↑
    この「3」の意味は、まだわかってません。

---------------
マクロ名
=SET.NAME("LF2",CHAR(13) &CHAR(13))
=INPUT("入力してください。"& LF2 & "例:あいうえお",2,"タイトル")
=IF(A3<>FALSE,ALERT(A3,2))
=RETURN()
---------------

=INPUT("XXXX" ,データの種類 [,タイトル] [,初期値][,X座標][,Y座標] [,ヘルプ])

 データの種類

 0  数式
 1  数値
 2  文字列
 4  論理値
 8  セル参照
 16 エラー
 64 配列


11、
●GOTO文

ここの「マクロを使おう − INPUT 関数」の例題が動かない原因がわかりました。
ht tp://support.microsoft.com/default.aspx?scid=kb;ja;410556
例題では説明していませんが、名前定義していないとダメなようです。
名前定義無しの場合、直接セルを指定してやればいい。(A1形式の指定しかダメでした。)

--------------------
マクロシート「Macro1」に

A1  GOTO命令
A2  =SET.NAME("St1",1)
A3  =IF(St1=1,GOTO(A10))
A4  =ALERT("戻った。",3)
A5  =GOTO(Macro2!A1)
A6  =ALERT("終わり。",2)
A7  =RETURN()

A10 MacroEnd
A11 =ALERT("GOTOで、別シーとへ飛んだ先",3)
A12 =GOTO(A4)
A13 =RETURN()

++++++
別のマクロシート「Macro2」に記載

A1  行き先
A2  =ALERT("別シートのマクロ",3)
A3  =GOTO(Macro1!A6)
A3  =RETURN()
--------------------

12、
●Auto_Open、Auto_Close

ブックを開いた時にインプットボックスを表示し、
内容をメッセージボックスで表示。
インプットボックスを表示する前にアラートをはさんでみました。
ついでに、マクロシートのセルF1の内容も表示させると。

--------------
A1 Auto_Open
A2 =ALERT("インプットボックスの起動",1)
A3 =IF(A2=FALSE,GOTO(A6))
A4 =INPUT("入力してください。"&CHAR(13) &CHAR(13) & "例:あいうえお",3,"入力ボックス "&F1)
A5 =IF(A4<>FALSE,ALERT(A4,2))
A6 =RETURN()
--------------

しか〜し、このままブックを保存終了後、再度ブックを開いてもマクロは実行されません。
実行させるようには、上記4.0マクロを書いたシートのマクロの先頭、A1を名前定義で登録する必要があります。

コードを書いたマクロシートのA1セルを選択した状態で、
挿入 → 名前 → 定義 で、開くと名前欄に
「Auto_Open」がありますから、それを追加、OKで閉じます。
これが終わった後、ブックを保存終了して、開きなおすと実行されます。

--------------
Auto_Close
=ALERT("終了します",3)
=RETURN()
--------------
こちらも「Auto_Close」と書いたセルの名前定義が必要


13、
●参照形式の設定
(A1形式に変更しても、セルの選択などはR1C1形式で書かないとエラーになります。用途がわかりません。)

=A1.R1C1(TRUE)  で、A1形式
=A1.R1C1(False)  で、R1C1形式


14、
●応用編1

応用1
--------------------
A1 マクロ名              概要
A2 =SET.NAME("SH",GET.CELL(32))    変数にアクティブブックシート名取得(マクロシートから実行するとして)
                    取得形式は、こんな感じ。「[ブック名]シート名」
A3 =SET.NAME("SH",MID(SH,2,FIND("]",SH,1)-2))  変数SHをブック名だけにする
A4 =ACTIVATE.NEXT(SH)         アクティブブックのアクティブシートの次のシート選択
A5 =SELECT("R5C2:R20C10")       B5:J20セル選択(A1形式は使えない見たい。)
A6 =COPY()              コピー
A7 =WORKBOOK.SELECT("Sheet3")     同ブックSheet3選択
A8 =SELECT("R6C2")          B6選択(貼り付け先の基準セル(左上部分))
A9 =PASTE.SPECIAL(3,1,FALSE,FALSE)  値だけ貼り付け
A10 =CANCEL.COPY()           コピーモード解除
A11 =RETURN()
--------------------

応用2(コピー元を選択しないだけ)
--------------------
A1 マクロ名             概要
A2 =COPY("Sheet1!R5C2:R20C10")    Sheet1!B5:J20をコピー
A3 =WORKBOOK.SELECT("Sheet3")    Sheet3選択
A4 =SELECT("R6C2")           B6選択(貼り付け先の基準セル(左上部分))
A5 =PASTE.SPECIAL(3,1,FALSE,FALSE)  値だけ貼り付け (注)セルを選択しないで貼り付ける方法解らず。
A6 =CANCEL.COPY()           コピーモード解除
A7 =RETURN()
--------------------


15、
●セルに値を入れる

=FORMULA("あいう","!D1")        アクティブシートのD1に「あいう」を書き込む。
=FORMULA("あいう","!R1C4")
=FORMULA("あいう","Sheet1!R3C2")   シート指定の場合。

シート名に変数を使った場合。
=SET.NAME("SH","Sheet1")
=FORMULA("あいう",SH & "!R3C2")

3,290 hits

【223】4.0マクロについて Jaka 07/12/26(水) 14:21 Excel[未読]
【224】4.0マクロについて2 Jaka 07/12/26(水) 14:22 Excel[未読]

  新規投稿 ┃ツリー表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃ホーム  
69 / 277 ←次へ | 前へ→
ページ:  ┃  記事番号:   
0
(SS)C-BOARD v3.8 is Free