1 名前:デフォルトの名無しさん mailto:sage [2012/11/25(日) 20:19:47.50 ] ExcelのVBAに関する質問スレです ★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。 ★2 ExcelのVBA以外の部分に関する質問はNGです。 但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。 ★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。 VBAとは、『Visual Basic for Applications』の略で Application ├Workbooks |└Workbook | ├Worksheets | |└Worksheet というApplication以下のオブジェクトを、VB言語で操作するものを指します。 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。 ★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。 ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、 コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。 ★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R) 前スレ:Excel VBA 質問スレ Part26 toro.2ch.net/test/read.cgi/tech/1345363310/
39 名前:デフォルトの名無しさん mailto:sage [2012/11/28(水) 02:37:08.01 ] >>32 まず一点、誤りを指摘すると、 エクセルでは「D行」とはいわず「D列」といいます。 「行」というのは1〜の縦方向、 「列」というのはA〜の横方向の呼び方です。 それであなたの質問に対する確認なのですが、 行を入れ替える条件はもっと限定できませんか? たとえば、 1 2 2 2 0.5 1 2 0.5 と並んでいたら 1+2+2+2+0.5…(2個飛ばして)+0.5 で8ですが、 1+2+2+2…(1個飛ばして)+1 も8になります。 つまり数値の取り方に複数の候補がある場合、 どれを優先すればよいのかがよく分からないのです。 その部分はもっと厳密に説明する必要があると思います。
40 名前:デフォルトの名無しさん mailto:sage [2012/11/28(水) 03:24:12.41 ] 自由に並べ替えていいんなら全体を降順ソートすれば一発で終わるんだけど
41 名前:デフォルトの名無しさん mailto:sage [2012/11/28(水) 04:02:04.18 ] >>40 身も蓋もないことを
42 名前:32 mailto:sage [2012/11/28(水) 08:57:48.88 ] >>38 ありがとうございます、早速試してみます >>39 すみません、初歩的なミスでしたorz 順番ですが、上にあるもの程、優先になります。 その例ですと、1+2+2+2+0.5…(2個飛ばして)+0.5 を選択し、飛ばした先にある0.5を、 1+2+2+2+0.5 の次に並び替えるようにしたいです。 >>40 説明不足でした、優先順位がありますorz
43 名前:デフォルトの名無しさん mailto:sage [2012/11/28(水) 18:28:43.80 ] つかここアルゴリズムスレじゃないんだから、方法は自分で考えろよ その方法をVBAで実装する段階になってから質問しろや
44 名前:32 mailto:sage [2012/11/28(水) 18:32:59.44 ] 皆様、ご指導ありがとうございます。 >>38 さんのアドバイスを参考に、 汚いソースになりましたが、なんとか完成致しました。 スレ汚し、失礼しました
45 名前:34 mailto:sage [2012/11/28(水) 18:34:40.00 ] 更にお願いします というかここでいいのかわからんけど Excel2000 64bit機でGetTextExtentPoint32を動かす方法教えてください Excel2000 32bit機では正常に動作しました Office2007 64bit機で動作させるにはPtrSafeを挿入すればいいらしいんですが不明です Excel2000 64bit機でPtrSafeがコンパイルエラーになってしまいます GetTextExtentPoint32の使用はここを参照にしました ttp://tamagolab.raindrop.jp/wiki/index.php?Excel%20VBA%20%A4%CE%A5%E1%A5%E2
46 名前:デフォルトの名無しさん mailto:sage [2012/11/28(水) 18:43:41.56 ] Excel2000に64bitバージョンなんてあったか? どっちにしてもOSの情報わからんと何とも言えんわ
47 名前:34 mailto:sage [2012/11/28(水) 19:09:14.68 ] win7 64bit機です 何か勘違いしてたかも >>45 の 19: hWnd = Application.hWnd でエラーが発生して動作しなくなりました winXP 32bit機 Excel2000の入ってるPC引っ張り出してきて実行したところ オブジェクトはこのプロパティまたはメソッドをサポートしていません とエラーを生成しました PC環境で実行できたり出来なかったりするんですが、何か参照設定が必要だったりするのでしょうか
48 名前:34 mailto:sage [2012/11/28(水) 19:22:47.39 ] ・・・ああ判った Application.hWnd てexcel2000じゃサポートしてないのか ってことですよね
49 名前:デフォルトの名無しさん mailto:sage [2012/11/28(水) 20:34:16.35 ] >>48 PtrSafe
50 名前:デフォルトの名無しさん mailto:sage [2012/11/28(水) 21:29:13.31 ] まず、 OSに32/64ビットの区別があること EXCELに32/64ビットの区別があること を理解してから出直してください
51 名前:デフォルトの名無しさん mailto:sage [2012/11/28(水) 21:43:29.61 ] Long Long Ago問題か?
52 名前:デフォルトの名無しさん mailto:sage [2012/11/28(水) 22:06:49.53 ] bit数とかPtrSafe以前にExcel2000じゃ動かないって話 OSとか関係ないって突っ込んでるの一人もいない・・・
53 名前:デフォルトの名無しさん mailto:sage [2012/11/29(木) 12:17:23.26 ] 楽しみは最後までとっておくタイプ
54 名前:デフォルトの名無しさん mailto:sage [2012/11/29(木) 13:30:43.87 ] >>47 Excel2000の時代にはウィンドウハンドルが簡単に拾えるApplication.Hwnd なんて 便利なものは無かったからな。 Excel2000も守備範囲なら API FindWindow でExcelのウィンドウハンドルを取得 するようにしておけば新旧Excelで使える。数行増えるだけだし。 ってVBAからだんだん離れるのであとはググれ
55 名前:デフォルトの名無しさん mailto:sage [2012/11/29(木) 17:50:02.29 ] >>50 でもExcel2000は32bitしかないでしょ。 13年前のソフトだよ?
56 名前:デフォルトの名無しさん [2012/11/30(金) 18:40:44.70 ] 助けて下さい!マジではまってます。 指定したディレクトリの中にあるファイル一覧を取得しようと 下記コードを書いたのですがなぜか、エラーが出てしまいます。 どこに問題があるのでしょうか? Dim path_test As String path_test = "C:\test" Dim file_count As Integer file_count = 0 strFileName = Dir(path_test & "\*.*", vbNormal) Do While strFileName <> "" strFileName = Dir() '★エラー発生★ file_count = file_count + 1 Loop ★エラー発生★ 実行時エラー'5': プロシージャの呼び出し、または引数が不正です。
57 名前:デフォルトの名無しさん mailto:sage [2012/11/30(金) 18:47:30.11 ] strFileName = Dir() ここ
58 名前:デフォルトの名無しさん [2012/11/30(金) 19:08:22.96 ] >>57 エラーの起きる場所は分かってるのですが strFileName = Dir() ← なぜここでエラーになりますか? ネットで解説されたコードをそのまま利用しているのですが その解説サイトの人は特にエラー発生の可能性については言及していませんでした。
59 名前:デフォルトの名無しさん mailto:sage [2012/11/30(金) 19:16:01.88 ] >>56 これが全ソースコード? このコードだけをサブプロシージャにしてエラーが出るの? 変数の命名ルールがキショいね
60 名前:桃白白 [2012/11/30(金) 19:24:36.72 ] >>56 そのコードには問題ないアルよ。 最初のDirを忘れてたり再帰でぐーるぐるしてたりするんじゃない? 桃白白はそういう疑念を持っています。
61 名前:デフォルトの名無しさん mailto:sage [2012/11/30(金) 19:25:31.16 ] strFileNameをint指定してるのに、Dir()格納できねええだろ フォルダ名一覧取得するためにstrFileNameとやらの中身に入れるなら別のstring型変数いれないと
62 名前:デフォルトの名無しさん mailto:sage [2012/11/30(金) 19:28:37.98 ] あ、ごめん適当なこといった C:\testってちゃんとフォルダが存在するよね?
63 名前:デフォルトの名無しさん mailto:sage [2012/11/30(金) 19:43:20.30 ] Adodbオブジェクトは実は全力の5%位の力しか使っていないと聞きました。全力を使ったらどうなるのでしょうか?地球が壊れますか?また、どんなメソッドが使えるのでしょう。 良かったら教えて下さい
64 名前:デフォルトの名無しさん mailto:sage [2012/11/30(金) 19:44:13.23 ] >>56 こいつ・・・動くぞ・・・!
65 名前:デフォルトの名無しさん mailto:sage [2012/11/30(金) 20:01:42.85 ] >>56 tempフォルダかその中のファイルに、アクセス権のないのがあるんじゃ?
66 名前:56 [2012/11/30(金) 20:02:47.65 ] >>59 問題となる部分のコードです。 一部ネット上に転がっていたソースを流用している為です。 >>60 >>61 >>62 再起処理はやっておりません。 また、 c:\test も存在しています。 私の環境が問題なのかなぁ? Excel2010 でマクロ組んでるんですけどん。
67 名前:デフォルトの名無しさん mailto:sage [2012/11/30(金) 20:50:27.10 ] >>65 tempじゃなくてtestだった フォルダなくてもエラーにはならないっぽいから、フォルダはあるのに ファイルかフォルダにアクセス権ないんじゃ?
68 名前:デフォルトの名無しさん mailto:sage [2012/11/30(金) 20:58:36.04 ] >>66 問題となる部分かどうかはお前が判断するな 全コードを提示して
69 名前:デフォルトの名無しさん mailto:sage [2012/11/30(金) 21:13:43.14 ] 普通にExcelで、セルの色とかフォントの色を変えたいとき ツールバーの該当コマンドボタンの▼をクリックするとカラーパレットが展開されて そこから色を選ぶことができるんだけど 例えば セルに下線を引くマクロを作ったとして、複数セルを選択し ・マクロボタンの▼をクリックして、カラーパレットが展開されて、「カラーを選んで下線を引く」 フォントの既定組み合わせ{明朝11、明朝13、ゴシック10、ゴシック11、ゴシック13}等を設定しておき ・マクロボタンの▼をクリックして、フォント・フォントサイズの組み合わせから選択して「フォントを変更する」 みたいなことってできますか?
70 名前:デフォルトの名無しさん mailto:sage [2012/11/30(金) 21:36:36.33 ] できる
71 名前:デフォルトの名無しさん mailto:sage [2012/11/30(金) 22:18:21.46 ] 右クリックやツールバーからできることは大体できる 書式設定とか普通
72 名前:デフォルトの名無しさん mailto:sage [2012/11/30(金) 22:52:14.28 ] >>66 ちなみにエラーが発生したとき、 変数"file_count"の値はどうなってます? (コード中断時に file_count の上にマウスカーソル持ってくれば値が表示されます)
73 名前:デフォルトの名無しさん [2012/12/01(土) 00:57:31.13 ] >>72 ありがとうございます。 どうしてもDirを使った方法だとできなかったので Fileうんたらの方法を使ってうまくいきました。
74 名前:デフォルトの名無しさん [2012/12/01(土) 01:39:54.57 ] VBA エディタで行番号を表示させる事は出来ないのでしょうか?
75 名前:デフォルトの名無しさん mailto:sage [2012/12/01(土) 01:47:50.06 ] >>74 アドイン公開してる人がいたような ググればすぐに見つかるはず
76 名前:デフォルトの名無しさん mailto:sage [2012/12/01(土) 08:06:00.76 ] セルに入力させるにあたって、1又は9以外を入力させたくないんですが、そういうことって出来ますか?
77 名前:デフォルトの名無しさん mailto:sage [2012/12/01(土) 08:17:19.22 ] >>76 VBAではないが セルに入力規則を設定して マウスで候補を選ばせるのはどう?
78 名前:デフォルトの名無しさん mailto:sage [2012/12/01(土) 09:06:41.20 ] >>77 入力規則のこと忘れてました^^; それが良いですね。ありがとです
79 名前:デフォルトの名無しさん mailto:sage [2012/12/01(土) 09:11:06.92 ] >>76 >>77 の方法が一番簡単だけど、 どうしてもVBAでやりたかったら対象のシートにこんなマクロを設定してみる。 特定のセルのみの設定なら修正が必要。 Private Sub Worksheet_Change(ByVal Target As Range) Dim tmpRange As Range For Each tmpRange In Target If tmpRange.Value <> 1 And tmpRange.Value <> 9 Then tmpRange.Value = "" End If Next End Sub
80 名前:デフォルトの名無しさん mailto:sage [2012/12/01(土) 09:34:57.53 ] >>79 ありがとう。今やってんのはC3セルのみなんで Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Target.Address = "$C$3" Then If Range("c3").Value <> 1 And Range("c3").Value <> 9 Then MsgBox "値は1,9のいずれかのみ 訂正!", vbOKOnly End If End If Application.EnableEvents = True End Sub という事にしました。入力規則も簡単で良いんですが、VBAの勉強も兼ねて^^;
81 名前:デフォルトの名無しさん mailto:sage [2012/12/01(土) 11:28:36.00 ] そりゃだめだC3を含んだ複数セルをコピペした場合そのチェックは動かない targetをFor EachしてC3セルだった場合にだけチェックするように書き換えないと これはVBA以前の問題で全てのケースを洗い出す想像力大切よ
82 名前:デフォルトの名無しさん mailto:sage [2012/12/01(土) 12:17:58.08 ] チェンジ かつ 固定セルなら V = Range("$C$3").Value If V <> 1 And V <> 9 Then MsgBox "$C$3 is 1 or 9 only.", vbOKOnly でいいじゃん入力規則でいいじゃん
83 名前:デフォルトの名無しさん mailto:sage [2012/12/01(土) 12:28:30.43 ] 入力規則の方が高速でいいよな
84 名前:デフォルトの名無しさん mailto:sage [2012/12/01(土) 13:52:56.94 ] 人間が介在する作業で高速もクソもないだろ どうがんばっても人間の指の方が遅いんだから
85 名前:デフォルトの名無しさん mailto:sage [2012/12/01(土) 20:37:23.52 ] スループットは確かに人間が介在したらそこがネックになるけど 操作する人間に対するレスポンスが早いか遅いかって話で、操作性の問題だな 人間の感覚でとらえられないぐらいの差ならどうでもいい
86 名前:デフォルトの名無しさん [2012/12/01(土) 21:08:25.23 ] VBA で c:\test\ を c:\test という具合に末尾の \ を削除したいのですがどうすれば末尾の特定文字を削除する事が出来ますか?
87 名前:デフォルトの名無しさん [2012/12/01(土) 21:13:58.31 ] 自己解決 left でいけた。いkぅぅう
88 名前:デフォルトの名無しさん mailto:sage [2012/12/01(土) 21:51:02.08 ] >>80 それだけのためにマクロ入れたらxlsmにするとかマクロ有効にするとかで嫌がられないか?
89 名前:デフォルトの名無しさん mailto:sage [2012/12/01(土) 21:51:36.03 ] leftってまさか、なんでもかんでも一文字削ってるんじゃ…
90 名前:デフォルトの名無しさん mailto:sage [2012/12/02(日) 14:47:52.43 ] HTTP/HTTPSで通信を行い、JSONPのデータをデコードして セルに書き出すようなExcelVBAのサンプルなどはございますでしょうか? よろしくお願いいたします。
91 名前:デフォルトの名無しさん mailto:sage [2012/12/02(日) 15:03:44.97 ] そんなCOMはねえな
92 名前:デフォルトの名無しさん mailto:sage [2012/12/02(日) 15:06:15.54 ] と思ったらJScript使えばそのままいけるのか 「vba HTTP/HTTPSで通信を行い、JSONP」でぐぐれ
93 名前:デフォルトの名無しさん mailto:sage [2012/12/02(日) 15:49:07.67 ] >>92 ありがとうございmす、さっそくググってきます!