- 締切済み
マクロ 上位モジュールの作成
4つのマクロ(basファイル)A,B,C,Dがあります。 これらを下位モジュールとする、上位モジュールをつくり 条件に応じてマクロを実行させたいと思っています。 どのようにマクロになりますでしょうか? 条件はファイル名に32~38の数字が含まれていて 32~35まではAの処理、 36はBの処理、37はCの処理、38はDの処理をしたいと考えています。 イメージとしては IF ファイル名=*32.csv or *33.csv or *34.csv or *35.csv Then A.bas elseif ファイル名=*36.csv Then B.bas elseif ファイル名=*37.csv Then C.bas elseif ファイル名=*38.csv Then D.bas end if 上記のような感じでIF文を全てのファイルを処理するまでループさせたいのですが、どなたかお教えいただけないでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- abe_onesel
- ベストアンサー率52% (20/38)
- abe_onesel
- ベストアンサー率52% (20/38)
関連するQ&A
- エクセルマクロで「1」を「01」に変換したい
エクセルマクロで、セルに入力された数値を、 変換するマクロを以下のように作成したのですが、 もっと簡単な方法はないのでしょうか。 やりたいことは、 「1」で入力された値を「01」に変換することです。 よろしくお願いします。 c = Sheets("Sheet1").Cells(1, 1).Value If c = 1 Then c = "01" ElseIf c = 2 Then c = "02" ElseIf b = 3 Then c = "03" ElseIf c = 4 Then c = "04" ElseIf c = 5 Then c = "05" ElseIf c = 6 Then c = "06" ElseIf c = 7 Then c = "07" ElseIf c = 8 Then c = "08" ElseIf c = 9 Then c = "09" End If
- ベストアンサー
- オフィス系ソフト
- ExcelVBAでモジュールを送る
ちょっとわかりにくいかもしれませんが、モジュールのコピーをマクロでできないものでしょうか? ExcelVBAで二つのファイルを使っています。Aという何のデータも入っていないファイルなのですが、実はそれにモジュールが書いてあり、それ専用に使っています。 CSVデータを変換したり、図形を描いたり、グラフを作るプログラムが書いてあります。 そのAファイルを使ってCSVデータ「Bファイル」を起動します。BファイルはダウンロードしてきたCSVファイルです。 Aファイルは常に個人個人がもっているのですが、CSVはネット上からダウンロードしています。 当然Aファイルが常に起動していないと、Bファイルだけでは「CSV変換」や「図形描写」ができないのわけです。「CSV変換」は最初の1回で終わる話ですが、「図形描写」「グラフ作成」はその後何度もすることがあります。 単にBファイルからマクロのインポートなどをすれば済むのかもしれませんが、数多くの使用者の中には「マクロのイン・エクスポートができない」とか「めんどくさい」という方がいます。外部にデータを引き渡す際に、AとBの両方送らねばならなくなってしまいます。 で・・・お伺いしたいのはマクロで「Aファイルのモジュール」を「Bファイルの中にコピー」できないか?ということなんです。 Aファイルでボタン一つを押せば、すべて整う環境にしたいのです。 逆に「AファイルにBのCSVデータをコピーして、そこで使うようにすれば?」と聞いたのですけど、それはどうしても出来なかったときの最低ラインとし、出来れば「Aのモジュール→BのCSV」に行きたいのだそうです。 マクロでモジュールのコピーというのは・・・出来るものなのでしょうか?よろしければ教えてください。
- ベストアンサー
- オフィス系ソフト
- マクロ A1のセルの値を見て、B1に値を入力したい。
エクセルのマクロでA1の値が1ならばB1にaを、2・3・4ならばbを、5ならばCを、それ以外は「該当無し」と入れたいのですが下のマクロではうまく行きません。ぜひご指導ください。 Sub If Left(Cells(1, 1).Value, 1) = 1 Then Cells(2,1).Text = "a" ElseIf Left(Cells(1,1).Value, 1) = 2 Or _ Left(Cells(1,1).Value, 1) = 3 Or _ Left(Cells(1,1).Value, 1) = 4 Then Cells(2,1).Text = "b" ElseIf Left(Cells(z, 37).Value, 1) = 5 Then Cells(2,1).Text = "c" Else: Cells(z, 40).Text = "該当無し" End If End Sub
- ベストアンサー
- オフィス系ソフト
- Excelの目次作成のマクロ
Excel 2000 で本の目次を作りたいと、思いネットで下記ののようなマクロを見つけました。 Sub 索引作成() Dim R As Range, R2 As Range, LastFound As Range Dim Found As Boolean Range("C2", Range("D65536").End(xlUp).Offset(1, 0)).Clear For Each R In Range("A2", Range("A65536").End(xlUp)) Found = False Set LastFound = Range("C65536").End(xlUp) For Each R2 In Range("C2", LastFound) If R2.Value = R.Value Then R2.Offset(0, 1).Value = R2.Offset(0, 1).Value & "," & R.Offset(0, 1).Value Found = True End If Next If Found = False Then LastFound.Offset(1, 0) = R.Value LastFound.Offset(1, 1) = R.Offset(0, 1).Value End If Next End Sub このマクロを使うと下記のような結果になるのですが、頁数の桁が多い場合(1000ページ以上)や、項目名の重複が多い場合は上手く動きません。 A B C D 項目名 頁 A 1 B 2 C 3 D 4 A 5 B 6 C 7 D 8 ↓上記マクロを使うと A B C D 項目名 頁 A 1 A 1,5 B 2 B 2,6 C 3 C 3,7 D 4 D 4,8 A 5 B 6 C 7 D 8 となりますが、頁が1000桁以上になると A B C D 項目名 頁 A 1000 A 100,010,04 B 1001 B 100,110,05 C 1002 C 100,210,06 D 1003 D 100,310,07 A 1004 B 1005 C 1006 D 1007 のようになります。 頁が1000桁以上になる場合や、項目名の重複が多くなる場合でも上手く動くマクロは無いものでしょうか。 何卒、宜しくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- 2次方程式を解くマクロを作成したのですが解けません。
2次方程式を解くマクロを作成したのですが解けません。 マクロの授業で2次方程式を解くマクロを作成したのですが途中で何がなんだかわかんなくなってしまいました。 どこがどう間違っているのかわからない初心者なのでわかりやすい解説よろしくお願いします。 ■二次方程式の解を求めるマクロ マクロ名 niji 条件 課題のファイルのsheet1を開き、 A1にxの二乗の係数 C3にxの係数 E3に定数項 を入力した場合 判別式の結果より、I3に解の状態を表示させる 表示は 2つの異なる実根 重根 複素数根 のいずれかとする。 そして、J3、K3に二次方程式の解を表示させる。解は二次方程式の解の公式 より求める。 複素数は i としてあらわす。 以下作成したマクロ↓ Sub niji() Range("A3").Select a = ActiveCell.Formula Range("C3").Select b = ActiveCell.Formula b2 = -b / 2 Range("E3").Select c = ActiveCell.Formula d = b * b - 4 * a * c Range("J3,K3").Formula = "" 'ActiveCell.Formula = "" If d > 0 Then x1 = b2 + Sqr(d) / 2 x2 = b2 - Sqr(d) / 2 Range("J2").Select ActiveCell.Formula = "解1" Range("J3").Select ActiveCell.Formula = Str$(x1) Range("K2").Select ActiveCell.Formula = "解2" Range("K3").Select ActiveCell.Formula = Str$(x2) End If If d = 0 Then Range("J2").Select ActiveCell.Formula = "x =" Range("J3").Select ActiveCell.Formula = Str$(b2) End If If d < 0 Then d2 = Sqr(-d) / 2 Range("J2").Select ActiveCell.Formula = "x1 =" Range("J3").Select ActiveCell.Formula = Str$(b2) + " +- i " + Str$(d2) End If If "J3" = "K3" Then Range("I3").Select ActiveCell.Formula = "重解" End If If "J3" > "K3" Then Range("I3").Select ActiveCell.Formula = "2つの異なる実根" End If If "J3" < "K3" Then Range("I3").Select ActiveCell.Formula = "2つの異なる実根" End If Range("b8").Select End Sub マクロ初心者なのでわかりやすい解説お願いします。
- 締切済み
- オフィス系ソフト
- エクセルマクロについてです
以下のようなマクロで、条件A1~A4のいずれかを満たした場合は、その時点でFor-Nextを抜け(例えばi=1のときにどれかの条件を満たせばi=2,3,4は検討しない)、 さらにNの数字が増えたときに、If以下の検討をするとき、条件A1~A4の中で既に満たされた条件が含まれている行は無視する、 というようにしたいのですが、どのようにすればよいでしょうか。 N=0 Do Until N = 10 For i = 1 To 4 If 条件A1 Then B1 ElseIf 条件A2 Then B2 ElseIf 条件A3 Then B3 ElseIf 条件A4 Then B4 EndIf Next i N = N + 1 Loop
- ベストアンサー
- オフィス系ソフト
- マクロモジュールの一覧表を作成したい。
先日来、VBAマクロが突然消える症状で困惑しておりましたが、本欄に投稿することで解決しました。 その過程で、既存のExcel Bookにあるマクロの一覧を別のフォルダーに取り出し、一覧にしたいと思いました。 Web検索でその方法を見つけ、MyMacroFolderに一覧とすることが出来ました。しかし、これらは添付ファイルのようにmodule1.bas,module2.bas.....であり、どのようなマクロか分かりません。それでExcel VBAを使ってmodule1,module2,...と開きながら、sub マクロ名で記されている名前を module1 マクロ名1 module2 マクロ名2 . . のように出力したいのですが、どのように記述すればよろしいのでしょうか?
- ベストアンサー
- Visual Basic
- 乱数の利用
僕の通う中学校では、乱数を利用してプログラムを作成することになりました。そしてプログラムを作りましたがステートメントがないと出てきます。どう解決すればよいでしょうか?これがプログラムです。 Dim a,b,c,d,e,f,g a=msgbox("幸せですか?",4) if a=6 then const b="運勢" randomize b=int(rnd*10) select case b case 0,1,2 c=messagebox("吉でした。彼女はいますか?",4) if c=6 then msgbox"90%",,b elseif c=7 then msgbox"60%",,b end if case 3,4,5 d=msgbox("凶でした。友達はいますか?",4) if d=6 then msgbox"60%",,b elseif d=7 then msgbox"20%",,b end if case 6,7 e=msgbox("末吉でした。",4) if e=6 then msgbox"60%",,b elseif e=7 then msgbox"40%",,b end if case 8 f=msgbox("大凶でした。夢はありますか?",4) if f=6 then msgbox"30%",,b elseif f=7 then msgbox"10%",,b end if case else msgbox"100%",,b end if elseif a=7 msgbox"0%" end select
- 締切済み
- その他(プログラミング・開発)
- マクロの作り方
以下の様な処理をするマクロを作成したいのですが、マクロがなんなのか自体よく分かっておりません。 何点か質問があるのですが、どなたか教えていただけないでしょうか。 言語はC++です [質問] 1.マクロの引数にstring型の文字列は渡せるのでしょうか? 2.マクロ内の処理は、通常のプログラミングと同様の処理が可能なのですか?それともマクロ特有の記述形式が存在するのでしょうか?行末に\が必要という点は認識しています。 3.マクロ内で、マクロを呼び出すことはできるのですか? 4.__FILE__と__LINE__でファイル名、行番号を取得できるとおもうのですが、これを変数に代入することはできますか?(string a=__LINE__等) 5.以下の処理をマクロで行うことはできますか? [処理内容] A=タイトル B=詳細 C=ソースファイル名 とした場合、マクロにこれらの変数を渡し、それぞれ以下の処理を行いたいです。 1)Aが10文字以上の場合、11文字目以降を切捨て 2)Bが10文字以上の場合、11文字目以降を切捨て 3)Cに行番号を付加 4)A,B,Cを連結し、Dというマクロの引数に渡す
- ベストアンサー
- C・C++・C#
- しつもおおおおん><;
一つのフォルダ内に格納されているCSVファイルの中身を展開し、 一つのシートに全てのCSVファイルの中身を反映させる というマクロなのですが QueryTablesを使い、ファイルを読み込み処理している時、 ●1 読み込んだデータのA列目が99以上の数値だったとき そのセルは黄色で塗りつぶし、何も書かず、次のセルから読み込む。 【一つ目のCSVデータ】 A B C D 1 20 12 14 67 2 98 45 12 57 3 67 58 82 91 4 30 64 21 23 【二つ目のCSVデータ】 A B C D 1 99 12 14 67 ←この列は黄色で塗りつぶし、2行目から読み込んでいく 2 98 45 12 57 3 67 58 82 91 4 30 64 21 23 ●2 読み込んだデータのA列目が0だった場合、前回読み込んだCSVファイルの最終A列目 を優先し 二つ目のデータの1列目は無視し、2列目から読み込む 【一つ目のCSVデータ】 A B C D 1 20 12 14 67 2 98 45 12 57 3 67 58 82 91 4 30 64 21 23 【二つ目のCSVデータ】 A B C D 1 99 12 14 67 ←この列は無視して2列目から読み込む 2 98 45 12 57 3 67 58 82 91 4 30 64 21 23 というようなマクロを現在作成中なのですが 途中経過として QueryTablesの中身をこのように作ってみました。 まだVB不慣れなものでこのQueryTablesだとIF文で記述した箇所をスルーして処理を 行ってしまうので 困っております ↓↓ 'Dir関数を使って指定フォルダ内csvファイルを順次処理 MyFnm = Dir(MyFol & "*.csv") Do Until Len(MyFnm) = 0& i = i + 1 'データエリアを取得してセット先を変更 n = IIf(n = 0, 1, n + n1) '外部データ取り込みを利用 With .QueryTables.Add(Connection:="TEXT;" & MyFol & MyFnm, _ Destination:=.Range("A" & n)) .AdjustColumnWidth = False .TextFilePlatform = xlWindows .TextFileStartRow = 2 '【csvファイルのM列を読み込んだときM列目の1行目が99%以上なら空白黄 文字】 If Range("M1") >= 99 Then Range("M1").Font.ColorIndex = 3 '【読み込んだcsvファイルでM列目の1行目が0ならば無視して2行目から読 み込む】 ElseIf Range("M1") = 0 Then .TextFileStartRow = 3 '【読み込んだcsvファイルでM列目の1行目が空白ならば空白のまま】 ElseIf Range("M1") = "" Then Range("M1").FontColor = 1 Else End If .TextFileCommaDelimiter = True .Refresh False n1 = .ResultRange.Rows.Count .Parent.Names(.Name).Delete .Delete End With '次のファイルへ MyFnm = Dir() Loop Sleep (2000) End With 長々となってしまいましたがご教授よろしくお願いします><;
- 締切済み
- オフィス系ソフト
お礼
ありがとうございます。 参考にしてみます。