目安箱 IV

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

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

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

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

【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")

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

引用なし
パスワード
   16、
●セルの値参照

--------------------
マクロ名
=Sheet1!B5
=ALERT(A17,2)
=RETURN()
--------------------

別ブックの場合
--------------------
マクロ名
=SET.NAME("BK","[Book1]")
=SET.NAME("SH","Sheet2!")
=SET.NAME("CL","E")
=SET.NAME("RW",3)
=SET.NAME("Ans",INDIRECT(BK & SH & CL & Rw)) '参照先ブックが開いていることが条件(A1形式)
=ALERT(Ans,2)
=RETURN()
--------------------


17、
●ループ処理

--------------------Sheet2のB5:B10に連番を書き込む。
ループ1
=SET.NAME("CT",0)
=FOR.CELL("vv",Sheet2!B5:B10, )
=  SET.NAME("CT",CT+1)
=  FORMULA(CT,vv)
=NEXT()
=RETURN()

--------------------
現代版風で書くと。
CT= 0
For Each vv In Sheets("Sheet2").Range("B5:B10")
  CT = CT + 1
  vv.Value = CT
Next

--------------------Sheet2のE1から1行おきに連番を書きこむ。
ループ2
=SET.NAME("SH","Sheet2")
=SET.NAME("Cnt",0)
=FOR("Rw",1,20, 2)
=  SET.NAME("Cnt",Cnt+1)
=  FORMULA("No" & Cnt,SH & "!R" & Rw & "C5")
=NEXT()
=RETURN()
--------------------
現代版風で書くと
Ct = 0
For i = 1 To 20 Step 2
  Ct = Ct + 1
  Sheets("Sheet2").Cells(i, 5).Value = "No" & Ct
Next


18、
●サブルーチン

Sheet2!A1:A10に10010、10020、10030・・・10100
まで記入後、最後にメッセージ。

--------------------
A1 サブルーチン
A2 =SET.NAME("Cnt",10000)
A3 =FOR.CELL("Cel",Sheet2!A1:A10, )
A4 =  Macro1!A12()
A5 =  FORMULA(Cnt,Cel)
A6 =NEXT()
A7 =ALERT(Cnt,2)
A8 =RETURN()


A11 マクロ名
A12 =SET.NAME("Cnt",Cnt+10)
A13 =RETURN()
--------------------


19、
●シートの移動

Sheet1を左から4番目に移動
=WORKBOOK.ADD("Sheet1",,4)

アクティブブックSheet1をBook2の4番目に移動。(同名チェックは解らず。)
=WORKBOOK.ADD("Sheet1","Book2",4)


20、
●メモ帳に貼り付け

--------------------
プログラム名
=COPY("Sheet1!R5C1:R29C10")     Sheet1!A5:J29までコピー
=EXEC("C:\WINNT\notepad.exe",1)   メモ帳起動(処理後の後片付けは解らず。)
=SEND.KEYS("^v")          SendKey技で、貼り付け
=CANCEL.COPY()           コピーモード解除
=RETURN()
--------------------
因みにメモ帳の場所は、Win2000での場合。


21、
●画面更新中止

=ECHO(FALSE)

解除は、TRUE


22、
●選択した範囲

=SELECTION()

--------------------
選択した範囲をループ
=FOR.CELL("CEL",SELECTION(), )
=  ALERT(CEL,2)
=NEXT()
=RETURN()
--------------------


23、
●最後のセル選択

--------------------
シート1のA列データ最後セル選択
=ACTIVATE("Sheet1")
=SELECT("R1C1")
=SELECT.END(4)
=RETURN()
--------------------
※セルを選択しない方法は解りません。

SELECT.ENDの引数
1=ToLeft
2=ToRight
3=ToUp
4=ToDown


○例1
--------------------(Sheet1B列)
最後のセル番地ToDown(マクロシートから実行するとして)
=ECHO(FALSE)           ← TRUEにするとなぜかチラつく
=SET.NAME("SHNm",GET.DOCUMENT(1))
=ACTIVATE("Sheet1")
=SELECT("R1C2")
=SELECT.END(4)
=SET.NAME("ACELR",ROW(ACTIVE.CELL()))
=SET.NAME("ACELL",COLUMN(ACTIVE.CELL()))
=ACTIVATE(SHNm)
=ALERT("最後の行 " & ACELR & CHAR(13) & "列 " & ACELL,2)
=RETURN()
--------------------

○例2
--------------------(Sheet1B列)
最後のセル番地ToUp(マクロシートから実行するとして)
=ECHO(FALSE)
SHNm=GET.DOCUMENT(1)
=ACTIVATE("Sheet1")
ACSh=ACTIVE.CELL()
=SELECT("R65536C2")
=SELECT.END(3)
=SET.NAME("ACELR",ROW(ACTIVE.CELL()))
=SET.NAME("ACELL",COLUMN(ACTIVE.CELL()))
=SELECT(ACSh)
=ACTIVATE(SHNm)
    '← =ECHO(TRUE) をいれると、若干チラつく上に、
    '終了後のスクロールバーの位置が気に食わない。
=ALERT("最後の行 " & ACELR & CHAR(13) & "列 " & ACELL,2)
=RETURN()
--------------------


24、
●セルの罫線
選択してあるセルが対象(選択しない方法は解らず)

=BORDER(1.,2.,3.,4.,5.,パターン,1.の色,2.の色,3.の色,4.の色,5.の色)

パターンは、無しか網掛けの2種(FALSE or 0 か TRUE or 1)


25、
●セルの色
選択してあるセルが対象(選択しない方法は解らず)

=PATTERNS(パターン,パターンの色の方,セルの色,TRUE)

--------------------
マクロ名
=PATTERNS(1,1,49,TRUE)
=RETURN()
--------------------

パターン            パターンの色     セルの色

0 = パターン無し(色もつかない)0 = 不明黒      0 = パターン無し(色もつかない)
1 = 塗りつぶし         1 = 黒        1 = 黒
2 = 50%灰色           2 = 白        2 = 白
3 = 75%灰色           3 = 赤        3 = 赤
4 = 25%灰色           4 = 明るい緑     4 = 明るい緑
5 = 横 縞           5 = 青        5 = 青
6 = 縦 縞           6 = 黄        6 = 黄
7 = 右下がり斜線 縞      7 = ピンク      7 = ピンク
8 = 左下がり斜線 縞      8 = 水色       8 = 水色
9 = 左下がり斜線 格子     9 = 濃い赤      9 = 濃い赤
10 = 極太線左下がり斜線 格子 10 = 緑        10 = 緑
11 = 実線 横 縞       11 = 濃い青      11=濃い青
12 = 実線 縦 縞       12 = 濃い黄      12=濃い黄
13 = 実線 右下がり斜線 縞  13 = 紫        13=紫
14 = 実線 左下がり斜線 縞  14 = 青緑       14=青緑
15 = 実線 横 格子      15 = 25%灰色     15=25%灰色
16 = 実線 左下がり斜線 格子 16 = 50%灰色     16=たぶん左と同じ
17 = 12.5%灰色        17 = 下2、左1    17=  々
18 = 6.25%灰色        18 = 下2、左2    18=  々
                19 = 下2、左3    19=  々
                20 = 下2、左4    20=  々
                21 = 下2、左5    21=  々
                22 = 下2、左6    22=  々
                23 = 下2、左7    23=  々
                24 = 下2、左8(右1)24=下2、左8(右1)
                25 = 下1、左1    25=たぶん左と同じ
                26 = 下1、左2    26=  々
                27 = 下1、左3    27=  々
                28 = 下1、左4    28=  々
                29 = 下1、左5    29=  々
                30 = 下1、左6    30=  々
                31 = 下1、左7    31=  々
                32 = 下1、左8(右1)32=  々
                33 = スカイブルー   33=  々
                34 = 薄い水色     34=  々
                35 = 薄い緑      35=  々
                36 = 薄い黄      36=  々
                37 = ペールブルー   37=  々
                38 = ローズ      38=  々
                39 = ラベンダー    39=  々
                40 = ベージュ     40=ベージュ
                41 = 薄い青      41=たぶん左と同じ
                42 = アクア      42=  々
                43 = ライム      43=  々
                44 = ゴールド     44=  々
                45 = 薄いオレンジ   45=  々
                46 = オレンジ     46=  々
                47 = ブルーグレー   47=  々
                48 = 40%灰色      48=  々
                49 = 濃い青緑     49=濃い青緑
                50 = シーグリーン   50=シーグリーン
                51 = 濃い緑      51=濃い緑
                52 = オリーブ     52=オリーブ
                53 = 茶        53=茶
                54 = プラム      54=プラム
                55 = インディゴ      55=インディゴ
                56 = 80%灰色     56=80%灰色



ここから、直接コピぺすると
=RETURN()
が無い。とかのエラーになるときがあるみたいです。
フォントの違い?原因不明です。

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