1 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 01:05:30 ] Excelの「VBA」に関する質問スレです 前スレ pc12.2ch.net/test/read.cgi/tech/1235332603/ ★1 質問をするときはOSとExcelのバージョンを必ず書きましょう ★2 わからなければとりあえず「マクロの記録」をしてみましょう ★3 丸投げのプログラム作成依頼は受け付けていません ★4 VBAを使わない、Excelの使い方に関する質問はスレ違いです Excel総合相談所 82 pc11.2ch.net/test/read.cgi/bsoft/1241825062/
48 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:28:22 ] 質問です。 shell関数でIEを全画面サイズで開く処理を行うと、 会社のPCだと、どうしても全画面で開けません。 最小化でも開けず、ただ適当なサイズで開いてしまうんですが、 何かサイズ指定が不可能になる条件ってPC側にあるんでしょうか? OSはXP、MSは2002です。
49 名前:デフォルトの名無しさん [2009/05/12(火) 21:57:36 ] 教えてください Excel2003で、セルを右クリックして出るポップアップメニューに 独自メニューを加えたいのですが、最初のシートには 追加できたのですが(下参照)、2枚目以降のシートのセル+右クリックでは 追加メニューが表示されません すべてのシートのセルの右クリックポップアップメニューに独自メニューを 追加する方法またはある特定のシートのセルの右クリックポップアップメニューに 追加する方法はありますでしょうか? よろしくお願いいたします Public Sub CreatePopUp() Dim fBar As CommandBar Dim fBtn As CommandBarButton Set fBar = CommandBars("Worksheet Menu bar").CommandBars("Cell") fBar.Reset '初期化 Set fBtn = fBar.Controls.Add(msoControlButton, Temporary:=True) fBtn.BeginGroup = True '新しいグループにする fBtn.Caption = "変更" fBtn.OnAction = "Modify" Set fBtn = Nothing Set fBar = Nothing End Sub
50 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:22:39 ] 適当だけど 標準モジュールの一番上に記述 Public Declare Function GetAsyncKeyState Lib "User32.dll" ( _ ByVal vKey As Long _ ) As Long Public Const VK_RBUTTON = &H2 '[RightClick] Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 適応したいシートに記述 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If GetAsyncKeyState(VK_RBUTTON) Then Dim fBar As CommandBar Dim fBtn As CommandBarButton Set fBar = CommandBars("Worksheet Menu bar").CommandBars("Cell") fBar.Reset '初期化 Set fBtn = fBar.Controls.Add(msoControlButton, Temporary:=True) fBtn.BeginGroup = True '新しいグループにする fBtn.Caption = "変更" fBtn.OnAction = "Modify" Set fBtn = Nothing Set fBar = Nothing End If End Sub
51 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:36:02 ] >>48 ie側の問題だと思う iexplore -nohome だと効くみたいだけど
52 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:50:59 ] >>51 そうなんですか。。。 ありがとうございます。
53 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 12:54:29 ] msgboxのYES,NOをすべての最前面に出す方法はないでしょうか? VbMsgBoxSetForegroundが最前面表示とあるので MsgBox("確認", vbYesNo, vbMsgBoxSetForeground) としてみたのですが VBA実行→IEが立ち上がる→確認がIEの後ろに隠れてしまう (奥からエクセル、確認msgbox、IEの順になってしまう) VBA実行→IEが立ち上がる→確認がIEの手前で 奥からエクセル、IE、確認msgboxの順になるようにしたいと思っています
54 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 15:12:06 ] + vbSystemModal
55 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 15:31:48 ] >>53 APIでエクセルをアクティブにしてからメッセージボックスを出すとか
56 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 15:55:24 ] ★5 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。 VBAとは、『Visual Basic for Application』の略で Application ├Workbooks |└Workbook | ├Worksheets | |└Worksheet というApplication以下のオブジェクトを、VB言語で操作するものを指します。 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
57 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 16:08:53 ] MsgBoxについての話はスレ違いか? vbSystemModal使うと「メッセージ ボックスに応答するまで、すべてのアプリケーションが中断されます。」 だから都合悪いかもしれないと思ってAPI使うってアクティブにする案を出したんだが・・・ APIの使い方がわからないって言ってきたらググレカスとでも言っておくがなw
58 名前:57 mailto:sage [2009/05/13(水) 16:10:07 ] 訂正 × API使うってアクティブにする ○ API使ってアクティブにする
59 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 16:36:25 ] 要件満たさんだろ
60 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 19:39:10 ] そもそもアクティブにするのと最前面にするのは違うし。 おかげでボタンが押せなくて操作不能になるアプリがたまにある。
61 名前:デフォルトの名無しさん [2009/05/13(水) 21:37:14 ] >50 お返事ありがとう その方法でもメニューが追加されるのは一枚目のシートだけ見たいです 具具っても見当たらないんですよね
62 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 23:07:23 ] >>49 いま手元にExcelが無いのであれだが ' Set fBar = CommandBars("Worksheet Menu bar").CommandBars("Cell") Set fBar = Application.CommandBars("Cell") で どうかな?
63 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 23:13:16 ] セルに色が設定されていない状態のcolorIndexは何でしょうか? If Worksheets("Sheet1").Cells(1, 1).Font.ColorIndex <> 2 Then MsgBox "color" End If みたいに書いているんですが、bookを作った最初の状態は、白ではなく、色が未設定の状態だと思うんですが。。。
64 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 23:16:58 ] xlColorIndexNone ですかね。
65 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 23:19:21 ] Interior.Colorindex= 0 fontではなくInteriorです!
66 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 23:23:50 ] ありがとうございます! 0でもxlColorIndexNoneでも同じって事ですか? fontとInteriorはコピーする箇所を間違えました;
67 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 23:49:08 ] 例えば、 Range("A1").Activate Activecell.Interior.Colorindex=0 Msgbox Activecell.Interior.Colorindex Activecell.Interior.Colorindex=xlNone Msgbox Activecell.Interior.Colorindex Activecell.Interior.Colorindex=xlColorIndexNone Msgbox Activecell.Interior.Colorindex Activecell.Interior.Colorindex=xlColorIndexAutomatic Msgbox Activecell.Interior.Colorindex とかすると面白い?
68 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 01:13:52 ] xlNoneは-4142だから0とは違う
69 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 12:35:39 ] -4142 -4142 -4142 -4105 になったぞ by Excel97
70 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 19:53:45 ] スイマセン、ローカルにコピーしたロータスノーツのファイルにアクセスする方法について教えていただきたいのですが・・・ あと、VBAの設定で参照可能なライブラリファイルにチェックを入れとけばいいんですよね?
71 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 19:47:16 ] オブジェクト型変数には、オブジェクト自身ではなく、オブジェクトの情報を呼び出す為の番号(参照)が入る。 って、要するにポインタのことですか?
72 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 20:27:27 ] 参照です。
73 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 20:34:09 ] 大まかには合ってるんじゃない? とりあえず、他の変数に代入してもオブジェクトそのものは 複製されない事だけ把握しとけばOK。
74 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 20:46:14 ] 実態をコピーせずに何らかの番号で区別するって意味では合ってるかもしれないけど やっぱり参照とポインタは微妙に違う 狭い意味だとポインタはアドレスのことだったりもするし あとは実装次第だ
75 名前:71 mailto:sage [2009/05/16(土) 21:09:11 ] >>72-74 ありがとうございます。
76 名前: ◆aAB/3SgCFU mailto:sage [2009/05/17(日) 13:44:16 ] 自分が使っているテキストでは、下のプログラムを実行すると、 シートの行と列全てがアトランダムに塗りつぶされるはずなのですが、 実際にやってみても、全列の1行目しか塗りつぶされません。 どこかおかしいのか、教えていただけませんか? Option Explicit Sub 画面更新() Dim i As Integer Application.ScreenUpdating = False Rows.ColumnWidth = 1.75 For i = 1 To 6000 Cells(i).Interior.ColorIndex = Int(Rnd * 56) + 1 Next i MsgBox "これから更新します。" Application.ScreenUpdating = True MsgBox "更新終わりました。" End Sub
77 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:13:56 ] >>76 Office2007で利用可能な桁数が大幅に増えた(16384?)のが理由。 桁数が最大256桁とか決めうちしていると、こういうことになる。
78 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:14:38 ] Cells(i). が原因だね。 cells(row,column) で指定しないと。
79 名前: ◆aAB/3SgCFU mailto:sage [2009/05/17(日) 19:32:56 ] >>77-78 どうもありがとう
80 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 07:30:50 ] 質問です VBAで他のアプリケーションを開くまでは色々ググって出来たんですが そのアプリが閉じられたら、再びVBAに処理を戻したいんです。 今はファイル名のリストがフォーム上に有ってその名前で検索したファイルを開くという作業で一太郎やワード等を ShellExecuteで開くというの作ったんですが 開いたファイルが閉じられたら更新日時を調べて変化が有れば書類の板番号を更新したいんですが いつ閉じられたかも解らないし、ファイルを開いて処理が中断し閉じて再開すると言った事は不可能でしょうか?
81 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 09:09:25 ] >>80 それはアプリの終了よりもファイルの更新を調べた方がいいのでは。 VBAで1秒間隔のタイマーをセットして、ファィルのタイムスタンプを1秒おきに調べるみたいな方法なら すぐに思い付くけど。
82 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 12:00:46 ] >>81 わかりました それで行きます
83 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 13:17:19 ] えっ、それでいっちゃうの?
84 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 13:20:12 ] 行くって言ってるだろ
85 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 14:53:02 ] だって 思い付かないんだもん
86 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 16:03:24 ] OpenProcess()してWaitForSingleObject()するのは駄目なのか?
87 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 16:06:00 ] dirname/filea.ext dirname/fileb.ext があったときに、".ext"に関連づけられているsomeapp.exeを起動したとき、 fileb.extもsomeapp.exeで更新している可能性があるので、 プロセスの終了を待ち合わせて、dirname/*を全検索して情報を更新するのが一番。
88 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 17:00:13 ] ファイルを閉じて、アプリは閉じないかもしれない
89 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 17:19:47 ] ROTにファイルがあるかチェックすればよい
90 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 19:17:48 ] line input 命令で chr(&h0) の入ったレコードを読み込むと強制的に chr(&h20)に置き換えられるのでしょうか? もしそうでしたら、何らかの回避方法を教えていただきたいのですが・・・
91 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 20:21:34 ] バイナリで読め
92 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 11:12:20 ] >>86 試して見ましたが ファイルが開き終わるとwaitが終了し次の処理に移ってしまうようで上手くいきませんで filepath="sample.txt" CreateObject("WScript.Shell").Run FilePath, vbNormalFocus, True MsgBox FilePath & "が閉じられました。", vbInformation Or vbSystemModal これで済ませました お騒がせしました
93 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 12:11:15 ] ワークシートのmodと異なり、VBAのmodは小数点下が切り捨てられてしまいます。 小数点下を含む剰余を返すようにしたいのですが、ワークシートのmodは演算子だから application.mod()とは出来ない。 良い方法はありますでしょうか?
94 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 14:33:35 ] 小数点下は元の数と同じな気がする
95 名前:93 mailto:sage [2009/05/19(火) 15:32:48 ] >>94 分母が整数なら・・・。 x mod yの場合、x - Int(x / y) * yで良いのかなぁ。
96 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 22:18:52 ] x - (x \ y) * y だとどうだろう
97 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 22:45:17 ] 顔文字かと思った
98 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 22:52:54 ] >>96 たばこを吸うバルタン星人ですよね???
99 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 15:37:42 ] すいません、WindowsXP SP3、Excel2003での質問なんですが、 VBAを使って罫線ツールバーの「罫線を作成」機能(セルの枠線にそってクリック・ドラッグで罫線を引く) と同じことをするのは可能でしょうか?
100 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 17:04:50 ] >>99 罫線を引きたいセルを選んでVBA実行して罫線が引かれるっていうのならできるんじゃね
101 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 17:29:32 ] test
102 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 21:13:05 ] 以下のようなことをやりたいです。 XP、Excel2003です。 Excelファイルが2つある。1つは用語集ファイルと呼び、もう1つは作業ファイルと呼ぶ。 用語集ファイルには英単語とその対訳がリスト形式で保存されている。 作業ファイルには英文が書かれていて、知らない英単語が出てきたら用語集ファイルを検索して その意味を調べる。 具体的には 1.作業ファイル中の検索したい単語を反転表示させる。 2.右クリックのショートカットメニューから、独自に追加した「単語を検索」をクリックする。 3.用語集ファイルに、1で選択した単語の検索結果が表示される。(Ctrl+Fでの検索と同じ表示結果) ※ただし、作業ファイルにはマクロは記述しない。 作業ファイルにはマクロは記述しないので2が無理かと思うのですが、代替案として どのような方法を取ればいいでしょうか?(右クリックのショートカットメニューでなくてもいいので とにかく作業ファイルにはマクロは記述せずに、3と同じ結果を得たいのです) おおまかな手順でいいので、ヒントをお願いします。
103 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 21:26:28 ] personal.xlsに記述するのもだめ?
104 名前:102 mailto:sage [2009/05/20(水) 21:49:38 ] >>103 OKです。 personal.xlsが何なのか知らなかったので調べたのですが、どうやら自分の作ったマクロを まとめておくエクセルファイルのようですね(初心者ですみません)。 つまり、最終的には作業ファイル・用語集ファイル・personal.xlsという3つのファイルで作業する という認識で正しいですよね?
105 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 22:00:12 ] >>102 その程度のユーザビリティなら、そのままCtrl+Fで良いじゃん。 わざわざマクロを組む必要性がわからん。
106 名前:105 mailto:sage [2009/05/20(水) 22:01:04 ] >>105 あぁ、別ファイルか。 ごめん。
107 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 07:37:30 ] >>95 別に分母が正数じゃなくてもそれでいいんじゃない? むしろ分母が整数の必要があるのは>>96 だな。
108 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 08:20:20 ] 重複に関してちょっと質問します。 = IF(COUNTIF(B:B,B4) >1, "重複","") この関数でE4という条件をB列全てに適応できたらと 思っています。この関数ではB4のセルの内容が 他と重複してるかいないかのチェックだけになります。 B4セル エクセル B5セル ワード このような場合エクセルとワードという単語がB列で 重複してるかいないかのチェックになります。
109 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 09:31:14 ] これはVBAではないですよね?
110 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 11:00:14 ] エクセルだなw
111 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 20:18:50 ] あるセルにこんなSUMIF関数を入れたいんだけど、 Cells(r + 1, 4).FormulaArray = "=SumIf($O1:$O500,cells(r,3),#K1:$K500)" エラーになってしまうのは、検索条件がおかしい? (rはFOR〜Nextさせています)
112 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 20:32:10 ] Cells関数なんてあったか?
113 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 20:43:27 ] >>111 何で文字列に変数名が入ってるんだ。 ” ”で囲まれた中は文字列だから、rは文字のrでしか無い。 てか、SUMIFなんて使わずにVBAで構文書いた方がずっと楽だよ。
114 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 21:28:23 ] こうか? Cells(r + 1, 4).FormulaArray = "=SUMIF($O1:$O500," & Cells(r, 3) & ",#K1:$K500)"
115 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 01:11:16 ] >>111 そんなのはピボットでやれよ。 #は$の間違いか?
116 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 08:13:03 ] >>113 for文使ってるって言ってるんだからVBA使ってるいるんじゃないのか?
117 名前:デフォルトの名無しさん [2009/05/22(金) 11:29:40 ] >>4 replace ☆VBAはVisual BASIC For Applicationsの略だとされており、Visual BASIC Visual BASIC .NET VBScrptとは文法が異なる言語です。(ただし共通性は 概して高いです。) ☆制限はそれなりにありますが多くのVBA環境からもWindowsの共通ライブラリ を利用することが出来ます。(但しそれぞれのライブラリの個性に応 じた、専門知識は必須ですがそれが公開されている(=入手可能)とは限りま せん) ☆このスレではVBAを用いてExcelがインストールされている Windowsマシンでは、原則としてはプログラム言語の種類によらずに 使用可能なライブラリ「Excel オブジェクト」の公開部分の操作をし て目的の結果を得る(※)手段を考案する状況で発生した疑問、質問に対して 有志が答えるスレッドだと考えられます。Excelに付属のVBAエディター を使用してプログラミングを行っているという状況はまさにこの 状況になりますし、その状況以外で発生したものはスレ違いになる可能性 が濃厚です。 (※)この手段が邪道でExcel道に根本的に反するという意見も貴重 です。Excelは一元的かつ算術的な処理の為のソフトウェアであり、多元的 かつ手続き的な処理には向かないという考えに基づくものです。 本来VBAがもっとも効率的に活躍するのはAccess環境であるという考え方 を取りたいものです。
118 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 11:51:39 ] >>111 そもそもFormulArrayなら範囲に1個の配列数式だからループを回すのはおかしい。 式の入力範囲がD2:D100だったらD2:D100を選択して{=SUMIF(O1:O500,C2:C100,K1:K500)]だが Range("D2:D100").FormulaArray = "SUMIF(O1:O500,C2:C100,K1:K500)" と書けば配列数式が入力される。 配列数式じゃなければFormulaArrayじゃなくてFormulaだ。 どっちにしてもループは回す必要なし。 >>115 が言うようにおそらくピボットテーブルでできることだろうけどな。
119 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 11:52:34 ] Range("D2:D100").FormulaArray = "=SUMIF(O1:O500,C2:C100,K1:K500)" だった。
120 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 12:15:10 ] >>117 回答者側はその物言いで理解できるだろうけど 質問者側はそれじゃ理解できない奴多いだろうな
121 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 13:32:03 ] 世の中は即理解できる世界ばかりで出来ているわけじゃないことを 教えるのは重要
122 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 13:40:44 ] プログラムって、頭の良い人なら3日くらいで何でもできるようになるのだろうか? 自分は4月から勉強し始めたけど、やってもやっても、 分からないことや、知らなかったことが出てきてゴールが見えてこない。
123 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 13:48:57 ] 頭の良い人なら3日くらいで何でもできるようになるのだろうか? 3日くらいで何でもできるようになるのが頭の良い人
124 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 14:18:55 ] 試験勉強じゃないから暗記しなくてもいいし わからなかったら人に聞いてもいいし 本人に作る気があればプログラムなんかいくらでも作れるだろ
125 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 14:31:46 ] 俺は長い事ECMAやってからVBAを始めたんだけど、 ・言語体系を覚えるまで3か月 ・VBAで出来る事、向いてる事かが分かるまで更に3か月 ・調べながら自分で作れるようになるまで更に3か月 って感じで、かなり時間が掛かった記憶がある。 VBから始める人ならそれこそ3日で出来るとかあるだろうけど、 それ以外の言語からだときちいわ。 未だに分からん事の方が多い。 プログラムやったこと無い人だったら、変数って何?配列って何? って事から始まるんだし、もっと時間かかるんでないか?
126 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 14:34:59 ] ECMAって何だ?
127 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 14:36:41 ] まず、何でも出来るようにはならない。 出来るよ!って人でもその時々で調べながらプログラム組んでるものです。 暗記する必要もないし、調べながらでも出来れば問題ない。 大体、使うものって限られてるし、それが出来れば十分なわけです。
128 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 15:05:05 ] >>125 ECMAってJavaScriptだろ? そりゃきちいわ。同じ系統でもVBScriptからだと だいぶ違うと思うがどうかな。 だがVBA自体はかなりしっかりした 言語なんで半年以上かけて勉強したことに ついて損はしてないね。
129 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 17:25:31 ] OS:WindowsXP Excel2007 での質問です。 今までExcel2003で使っていたマクロの冒頭部分が以下のとおりです。 If Dir(OutPath & "\完成", vbDirectory) = "" Then MkDir OutPath & "\完成" ActiveWorkbook.SaveCopyAs FileName:=OutPath & "\Tmp.xls" Workbooks.Open FileName:=OutPath & "\Tmp.xls" Dim TmpWorkBook As String TmpWorkBook = "Tmp.xls" Workbooks(TmpWorkBook).Activate ここで作った一時ワークブックに、別に開いたCSVファイルをシートごとコピーするという命令が続くんですが、 Excel2007になってからCSVを開いた時勝手に巨大なシートサイズになる?のかどうかわかりませんが、 コピーの時点で「コピー先に対してシートサイズが大きすぎてコピーできません」となるようになってしまいました。 そこで上記マクロの"Tmp.xls"をすべて"Tmp.xlsx"にしてみたのですが、 今度はファイル拡張子とファイル内容が一致しませんと言われてOpenできませんでした。 原因と対処がわからないのですが、どのように改善したら良いでしょうか?
130 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 17:37:42 ] 追記:マクロ実行時点でのActiveWorkbookは本マクロが含まれてるファイルです。
131 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 18:15:34 ] すみません、自己解決しました。 大元のファイルをxlsmで保存しなおして、VBAの中もxlsmにすればいいんですね。
132 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 19:17:20 ] >>122 目的があれば、すぐに覚えられる 事務作業の自動化のために 表への入力、印刷設定→印刷の自動化、ファイルを正規化させたり、シートを一度に何個も作る・・ 等の作業をマクロの記録。そして改変。後はifやforを覚えたかな プログラムへのとっかかりとして、マクロの記録はとんでもなく優秀だと思うわ プロシージャやメソッド、その概念すら覚えて無くてもとりあえず動くマクロが作れるってところがね
133 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 19:48:19 ] >>127 確かに暗記しなくても書けるには書けるが、せめて 宣言系、制御系、演算子くらいは最低限暗記しないと、とても実用にはならないよ まあこのへんはまともなコード書けば必ず使う物だから、意識して覚えようとしなくても すぐに暗記しちゃうとは思うが
134 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 20:11:36 ] >>122 やりたいことが明確になればすぐにできるようになると思うよ わからないことが出たら調べてそれでもわからなければここで聞けばみんなが教えてくれるし 参考書読んでてもあまりできるようにはならないかな まず簡単な A1の値をA3にコピーするから A1の値をSHEET1のA3にコピーしてみる さらにA1の値を別BOOKのSHEET1のA3にコピーしてみる と言ったように自分でいろいろ弄って遊ぶような感覚でやっていかないと 覚えが悪いと思う
135 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 21:22:23 ] VBAを使ってツールバー上のコントロールを実行したいんですが、 ドロップダウンリストなどを項目を選択して実行するということは可能でしょうか? 例えば書式設定ツールバーのフォントを選択するリストでMS明朝を選んで実行、というようなことです。 普通のボタンをExecuteで実行するやり方は分かったんですが、リストの場合はどうすれば…
136 名前:デフォルト名無しさん mailto:sage [2009/05/22(金) 22:46:56 ] 学校の課題なんだけど、 ttp://www.hasimoto999.aki.gs/img-box/img/5764.jpg ttp://www.hasimoto999.aki.gs/img-box/img/5765.jpg が、5時間近く考えてもわからない 簡単過ぎる問題かもしれないけど、ご教授頼むorz ちなみに19の1は解けてる。
137 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 22:50:05 ] > ★3 丸投げのプログラム作成依頼は受け付けていません > ★7 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み > コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 > ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
138 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 22:55:09 ] >>136 そんなピラミッドを描いて何になる? って解答欄に書いて、相手にたたきつけろ!
139 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 22:58:13 ] For〜Next、二重ループ とまで書いてくれてるのに分からないとか
140 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:10:41 ] detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1411688549 やるだけ時間の無駄な問題だな
141 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:24:46 ] デバッグのことに関して質問したいです。 代入していない、宣言していない変数へアクセスしたときにエラーを出すにはどうすればいいですか? Option Explicitを指定すると 代入は検知できるんですが 宣言してない変数を読み出しても、Empty値が返ってくるだけで そのまま実行されてしまいます。
142 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:29:09 ] それともう一つ、 また、エラーが発生した箇所を調べることは出来ないのでしょうか? たとえば、オブジェクトをSetを使用しないで代入すると 「実行時エラー'91' オブジェクト変数またはWith(ry」と例外が発生して、ダイアログが出ますが この例外が発生した箇所を調べることは出来ないのでしょうか? 現在は地道にステップインでエラーが発生するまで追っていますが なんだかばからしくてやってられません。 また、例外構文もN88BASICを思い出させる、On Error〜割り込みしか無いのでしょうか? よくある、try〜finally 〜catch(Exception e) というような構文はないんですか?
143 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:30:44 ] >>142 >なんだかばからしくてやってられません それが自分の資質を示しているねw
144 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:34:47 ] >>136 辛口な事言うけど、論理的思考が全く出来てないでしょ。 ただ答えだけ貰ったって何も役に立たんのでは? 単位もらえりゃ良いって事なのかもしれんけどさ。 for i = 1 to 9
145 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:36:34 ] >>136 途中送信しちまった。 for i = 1 to 9 for j = 1 to 9 cells(i,j).value = i*j next next つーか、こんな問題も解けない生徒がいるのに良く授業だなんて言えるわな。
146 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:38:30 ] >>142 エラー吐いた部分で黄色く反転して中断されないか?
147 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:43:47 ] これでも別に不正解ではないな。プログラムサイズに制限もないみたいだし。 二重ループは最後に空ループでも置いとけばいい。 Range("A2")=1 Range("A3")=2 Range("A4")=3 Range("A5")=4 : 以下略 ちなみに、文句言ってるやつは全科目100点だったのかな? 宿題を誰かに写させて貰ったこともないのかな? 学校なんてこんなもんだよ。まじめに考えすぎ。
148 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 23:45:22 ] >>145 そうやって結局教えちゃうから育たないんでしょ