1read 100read
2011年11月2期プログラム34: Excel VBA 質問スレ Part21 (861)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
Excel VBA 質問スレ Part21
1 :11/09/25 〜 最終レス :11/11/24 01 http://pc11.2ch.net/test/read.cgi/tech/1054356121/ 02 http://pc11.2ch.net/test/read.cgi/tech/1168308855/ 03 http://pc11.2ch.net/test/read.cgi/tech/1180192018/ 04 http://pc11.2ch.net/test/read.cgi/tech/1189814602/ 05 http://pc11.2ch.net/test/read.cgi/tech/1197448064/ 06 http://pc11.2ch.net/test/read.cgi/tech/1205231499/ 07 http://pc11.2ch.net/test/read.cgi/tech/1212587819/ 08 http://pc11.2ch.net/test/read.cgi/tech/1219673793/ 09 http://pc11.2ch.net/test/read.cgi/tech/1228372971/ 10 http://pc12.2ch.net/test/read.cgi/tech/1235332603/ 11 http://pc12.2ch.net/test/read.cgi/tech/1241885130/ 12 http://pc12.2ch.net/test/read.cgi/tech/1247566074/ 13 http://pc12.2ch.net/test/read.cgi/tech/1254281104/ 14 http://pc12.2ch.net/test/read.cgi/tech/1262748898/ 15 http://pc12.2ch.net/test/read.cgi/tech/1271261239/ 16 http://hibari.2ch.net/test/read.cgi/tech/1280045912/ 17 http://hibari.2ch.net/test/read.cgi/tech/1289182437/ 18 http://hibari.2ch.net/test/read.cgi/tech/1298240666/ 19 http://hibari.2ch.net/test/read.cgi/tech/1305754555/ 前スレ: Excel VBA 質問スレ Part20 http://hibari.2ch.net/test/read.cgi/tech/1312435844/
2 : ExcelのVBAに関する質問スレです ★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。 ★2 ExcelのVBA以外の部分に関する質問はNGです。 但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。 ★3 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分野の話ではないので、ここでは聞かないでください。 ★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。 ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、 コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。 ★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
3 : タッチダウン3げと
4 : exportの使い方がいまいち分からないので教えて欲しいのですが シート1にある画像をpicフォルダにファイル名をnow+連番で保存しながら削除していくのを作りたいのですがうまく保存できません Dim myRess As Variant Dim ren As String Dim nm As Integer nm = 0 ren = Now ren = Replace(ren, "/", "") ren = Replace(ren, ":", "") ren = Replace(ren, " ", "") For Each pic In Worksheets("Sheet1").Pictures myRess = Worksheets("Sheet1").Pictures(pic.Name).Export( _ ThisWorkbook.Path & "\pic\" & ren & "_" & nm & ".jpg" _ , "JPG", False) pic.Delete nm = nm + 1 Next exportのところがうまく動いてくれないので保存できるようにするにはどうすればいいでしょうか
5 : for eachでpicに入れているのに Worksheets("Sheet1").Pictures(pic.Name) これは突っ込んで良いのか?
6 : >>4 Picture オブジェクトにはExportメソッドが存在しないんじゃないの? Chart オブジェクトなら使えるんだろうけど
7 : ではpictureオブジェクトをjpgで保存するにはどうしたらよいでしょうか
8 : ある名前のシートがbookに存在するかどうかのメソッドはないのかな 自分で調べりゃいいだけなんだけど、なんでないのかなと
9 : >>7 vbaでは機能自体がサポートされてない webで検索するとシート自体をHTML保存するとpictureオブジェクトがそれぞれ独立した画像ファイルとして保存されるので、 それを拾い出して使う、というやり方が多いみたい
10 : Excel2007だけど、ユーザーフォームのコマンドボタンにtoolchiphelpとか言うんだっけ? マウスポインタを置いた時にコメントみたいなもの出すのあるじゃないですか、 あれ出すことって出来ませんでしたっけ?
11 : >>10 CommandButton1.ControlTipText = "ツールチップはchipじゃなくてtip"
12 : >>11 おおっありがとう w
13 : >>8 自分で答え書いてるじゃんw > 自分で調べりゃいいだけ だから無いんだよ
14 : 質問は >なんでないのかなと じゃないかw
15 : >>14 何か勘違いしてないか? 「自分で調べりゃ」ってのは、自分でググればとかいう意味じゃなくて 「ある名前のシートがbookに存在するか」を「自分で(コード書いて)調べりゃ(取得すれば)」 簡単にできることだから、わざわざそういうメソッドを用意してないんだろってことが 「なんでないのか」の答えだってことだぞ 説明させんなよ、恥ずかしいw
16 : 基本的なことだと思うのですがすいません。 例えば、変数「name」が文字列"20110926tokyo晴"である場合 select case name case name の文字列にtokyo を含む場合 あるセルに東京と入れる case name にosaka を含む場合 あるセルに大阪と入れる end select みたいな処理をしたいのですが、変数の文字列の一部分だけ 一致で判別して処理を選ぶというのはどうしたらいいのでしょうか? 「*」とかで挟んだりするのかなと思い調べてみたのですが、よくわかりません。 あるいは、これは出来ないことなんでしょうか?
17 : Is
18 : >>17 ありがとうございます。そんなことでよかったんですね(^^; 恥ずかしいです。すいませんでした。
19 : >>16 Select Case True Case name Like "*tokyo*" >>17-18 のやり取りが俺にはわからん。 俺が馬鹿なんだろうか?
20 : select case の条件式はIsってことだろ
21 : Select Case name Case Is like "*tokyo*" って言いたかったんじゃないだろうか... 俺もこれで行けるとおもったが、Select Caseのヘルプ見ると >Is 演算子と Like 演算子以外の比較演算子と共に使われます。 つうことで、Likeはダメみたいだ
22 : http://homepage2.nifty.com/kmado/ke_m13.htm#E03M122 ここにある流れる文字について、 流れる文字のフォントサイズ変えることってできないですか?
23 : >>21 俺は >あるいは、これは出来ないことなんでしょうか? と質問しているので、IS=です と言っている つまり「できないです」と言ってると思った。
24 : >>22 VBAつうかWebBrowserコントロールの仕様を調べれば済むはなしじゃね
25 : OS:Windows Vista Ver:Excel 2007 質問です。 ワークシート上で特定範囲のセルをダブルクリックした時に、セル範囲を操作させるUserFormを設定しています。 ダブルクリックしたセルのRangeを記憶させるのに、これまではTarget値をRange型グローバル変数に格納させていました。 これで別に問題なく動かせているのですが、できればグローバル変数を使わず、変数の引き渡しを駆使して、ダブルクリックセルの位置をUserFormへ受け渡したいな、と思ったのですが、方法はあるのでしょうか??
26 : Excel2010です。 dictionaryオブジェクトを使って重複削除したいのですが、うまくいきません。 〜途中省略〜 Range("C1").Resize(Dic.Count) = Application.WorksheetFunction.Transpose(Dic.Keys) ここでエラーです。 どうしたらいいですか?
27 : >>26 Debug.Print Dic.Count
28 : Excel2007のStrconv関数のヘルプで vbKatakana** 16** 文字列内のひらがなをカタカナに変換します。 vbHiragana** 32 文字列内のカタカナをひらがなに変換します。 ** 国別情報の設定が日本の場合のみ有効です。 とありますが、この国別情報の設定ってのはExcelのどこでするんですかね? 特にそういうのをした覚えってのは無いんですけど^^;
29 : >>28 タイムゾーンとかだろ
30 : >>16 で質問したものなのですが case is 〜〜を使って例えば以下のように条件分岐してみたのですが Sub hoge() Dim name As String name = "2011_09_27tokyo晴" Select Case name Case Is < "tok" Debug.Print "東京" Case Is < "osa" Debug.Print "大阪" End Select End Sub 例えば 「 Case Is < "tok"」 の"tok" の部分を全然入ってない 文字の"m"とか また"雨" とかいれてもイミディエイトに 「東京」が書き込まれ実行してしまいます。 また数字類は全部falseになってしまいます。 やりたいこととしては、変数に文字列全部が一致するものが 入っていたらtrue "toc"などのように文字列に少しでも違いが あったらfalseで次の「case is」と照合していくというものを作りたいのですが どうすればよいのでしょうか?
31 : >>30 質問の意図は分かるが、文字列の部分一致を評価対象とするCaseラベルの書き方は無いと思う。 予め対象文字列から中の地域部分を示す文字列を抜き出す関数でも自作しておいて、その結果をSelect文に渡せば良いんじゃない?
32 : >>30 Isなんかその用途では使えないよ。 "2011_09_27osaka晴"って文字列は"tok"より小さいからね。 Select Caseなら>>19 に書いてるようにする必要がある。 単純に一つずつならIf...Then...Else ステートメントでもいいと思うが。
33 : >>26 そのケースでエラーになるのはDic.Countが0か65536を超えたときだな。 TransposeはExcel2007以降は使えないこともあるから気を付けた方がいい。 他人に使わせるときは65536要素以内でしか使えないとかコメントを書いておかないとな。 WorksheetFunction.Transposeと同じ機能の関数は自分で作った方がいいよ。 文字数制限も要素数制限もないし、おまけに速いから。 少ないデータで使い捨てマクロならどうでもいいけど。
34 : 補足 65536要素以内ってのは各次元がそれ以内ってことね。
35 : >>32 さん >>19 さん ありがとうございます Select Case True case 変数 Like "変数の文字列の一部分" のやり方で望みどおりのスクリプトが出来るようですね。問題が解決しました。 ありがとうございました。
36 : For t(1) = 1 to 5 For t(2) = 1 to 5 ・ ・ このような配列を使ったループを作りたいのですが、 ”Forで指定された変数はすでに使用されています”とエラーメッセージが出てしまうのですがどうすれば良いのでしょうか Excel2000、WindowsXPです
37 : >>36 無理 ヘルプに配列は使えないと明記されてる
38 : カウンター変数に配列を使って九九をやってみた。 Dim t(1 To 1) As Long Dim tt(2 To 2) As Long For t(1) = 1 To 9 For tt(2) = 1 To 9 Cells(t(1), tt(2)).Value = t(1) * tt(2) Next Next 使えないことはないぞwww
39 : >>37 ありがとうございます
40 : ExcelVBAの本を立ち読みしてたらオブジェクトって用語が頻繁に出てきたんですが、 これが今話題のオブジェクト指向って奴ですか?
41 : >>40 そうです。 ワークブック、ワークシート、セル… 慣れ親しんだExcelのあらゆる部品がオブジェクトであり それらに対して命令を下すことがExcelVBAのプログラミング であり、使う人は知らずともオブジェクト指向プログラミングを していることになります。
42 : >>41 ありがとうございます。 オブジェクト指向って意外と身近な存在なんですね。
43 : Windowsそのものがオブジェクト指向で作られています
44 : 話題に20年ぐらい乗り遅れてないかぁ?
45 : >>30 は学校で<の意味習わなかったの?どうして'like'的な意味があると思っちゃったの?
46 : instarでよくね
47 : そしてワークブックを使っていればオブジェクト指向だと勘違いしてベタ書きする低級PGが量産される
48 : プロパティとメソッドの違い教えろください
49 : オブジェクト指向プログラミングに関して、VBAで出来ないこと http://members3.jcom.home.ne.jp/daruma_kyo/aboutooa/vba_limit.html
50 : >>45 いや、最初無いと思ったんですが、>>16 で質問してisといわれたので、isで不等号使って 望みどおりできるのかなと。ちょっとやってみたら出来た気がして 意味はわからなかったんですが、これでいいのかなと。 でも詳しく使ってみると、思ってた用途と全然違って、再度質問しました。 ほとんど初心者なんです。 >"2011_09_27osaka晴"って文字列は"tok"より小さいからね。 これも意味がわからないです。文字数という意味でなら前者の方が大きいと思うんですが この場合何の大小の比較になるんでしょうか?
51 : >>46 InStrでもLikeでもどっちでもいいんだよ。 たいがいの人は両方使えるよ。
52 : >>50 バイナリモードの文字列の大小はまず先頭の文字の文字コードで大小比較する。 先頭の文字が同じときは次の文字で大小比較する。 それも同じときはそのまた次の文字で大小比較する。 "2011_09_27osaka晴"と"tok"ではまず"2"と"t"で比較する。 "2"の文字コードは"t"の文字コードより小さいから"2011_09_27osaka晴"は"tok"より小さい。 "a12"と"a3"の比較なら"a12"が小さい。
53 : >>52 ありがとうございます。文字コードの大小だったんですね。 それだと確かに全然思い通りに分けられないですね。 理解しました。ありがとうございます。
54 : >>48 プロパティ=変数 メソッド=関数
55 : なんとなく理解できた
56 : 今居るセルの1つ下の列から始めて 同じ列に文字が入力されているセルまでをloopで見つけたいのですが Do a = a + 1 Loop While Cells(a, 1) Like "*" と考えてみたのですが駄目無限ループしていまします。 どなたか分かる方お願いします。
57 : 文字が入力されているかどうかならこれで良いと思うんだけどなんで、わざわざLikeを使ってんの? Loop Until Cells(a, 1) <> ""
58 : 文字とか数字とかの区別が必要なのかどうかわかんないけど、 セル(a,1)から下方向にセルが空欄かどうかを調べるだけなら .cells(a,1).end(xldown).row のほうが早くない?
59 : まさかとは思うが下方向に空欄しかないんじゃ それと列って言ってるけど行のことだよね
60 : 1つ下の行の同じ列ってことか (a,b) (a+1,b)
61 : >>56 Like "*" だと セルが空欄でも(入っていても) 常に True になるよ Likeの文字パターン * は任意の数の文字(=文字数0も含む)だから
62 : nなんでこんな知識が偏ってるんだ・・・・
63 : execl2000です 前スレでpictureはhtmlで保存して抽出するのが一般的と教えてもらったものですが SaveAsを使ってhtmlにしたら自分自身が保存したhtmlになってしまいます エクスポートするような形でhtmlファイルに保存するにはどのようにしたら良いでしょうか
64 : >>63 前スレにそれらしき質問が見当たらないんですが、 どんな質問だったのですか? (前スレを全部開いて「html」と「picture」と、ついでに「jpeg」でスレ内検索しました)
65 : pictureをエクスポートする方法を質問しました
66 : >>4
67 : ああ前スレじゃなかったですね
68 : あーそれhtmlで出さなくてもjpg出力できるわー 今ちょっと時間ないしどうやったか忘れたけど昔やったわー
69 : >>63 これなんか参考にならない? ttp://vbatips.blog37.fc2.com/blog-entry-26.html あと、質問するなら名前欄に最初のレス番かなにか入れてよ もちろんHNとかトリップとかでもいいけど ここID出ないんで誰のレスなのか分かりにくいから
70 : >>69 できました ありがとうございます
71 : Win7、Excel2010なんだけど、 IEのダイアログを操作する方法ってないかな? ウィンドウハンドルとIHTMLDocumentは取得できるんだけど ここから、フォームに入力したり、ボタンとかクリックする方法がないかな?
72 : Excel2007 デジタル署名をVBE→ツール→デジタル署名から作ってみたのだけど、 [証明書の表示]を見ると、 このCAルート証明書は信頼されていません。信頼を有効にするには この証明書を信頼されたルート証明機関のストアにインストールして ください。 とあります。この「ルート証明機関のストアにインストール」する にはどうすれば良いの? (全く個人用なので公開とかするつもりは全っ然ないのですが)
73 : >>71 数年前にVB6で同じようなものを作ったが、ウィンドウハンドルは必要ない。
74 : windows2000、Excel2003 質問です。 ある一つのユーザーフォームを呼び出すプロシージャが2つあるのですが、 どっちのプロシージャから呼び出されたか判定出来るようにしたいです。 何かヒントだけでもいいので、教えてください。
75 : >>72 VBEで証明書つくれるようになったのか?手順教えてくれ まあどこで作った証明書でも良いんだが、証明書ファイルを(エクスプローラで) ダブルクリックしたらインストールできなかったか >>74 フォームにそれ用のフィールドなり変数なり作って呼び出し元のプロシジャで値をセットする グローバルな変数をつかう どっかのシートにどっちが呼び出したか書く
76 : >>75 72です 作ったのは Windowsのスタートメニュー →Microsoft Office →VBAプロジェクトのデジタル署名 で出てくる[デジタル証明書の作成] に名前を入れてみたんですが (ちなみにOSはXP)
77 : >>75 シートに書くという基本的な事が頭から抜けてました。 ありがとうです。
78 : With Selection .Replace what:=Worksheets("sheet1").Cells(3, 2), replacement:=Worksheets("sheet2").Cells(3, 2).Value, Lookat:=xlwhole,searchorder:=xlbyrows,matchcase:=false,matchbyte:=false End With この部分で構文エラーと出ます。何がいけないんでしょうか?
79 : >>76 いつの間にか証明書作れるようになってたんだな それで作ると勝手に個人用ストアに作られてるみたいなんで、管理コンソールで移動すれば良いんじゃないかな やり方はスレチなんで、MMC 管理コンソール 証明書 あたりでググって
80 : >>79 72です。出来ました。ありがとう!
81 : 2、3日前に初挑戦したバカですが、どうかお相手お願いします。 LCLICK 1215,176 KEY [Ctrl]++ KEY [End] KEY [Ctrl]-- LCLICK 709,441 KEY [Ctrl]++ KEY V KEY [Ctrl]-- LCLICK 723,753 このような簡単なものを作ったのですが、何度も何度もペーストしてしまいます。 一時停止にはDELAYコマンドを使うといいという記事も見たのですが どうもDELAY 3000 等でも3秒止まってくれません、記述の仕方に問題があるのでしょうか? お願いします
82 : ごめんなさい、記述し忘れました。ループ操作を実行した時にペーストが数度繰り返されてしまいます。 どうか、お助けください
83 : スレタイ2000回読んだ方がいい
84 : >>78 それその位置で改行してるのか? VBAはどこでも改行していい言語じゃないぞ >>81 ここ、何のスレか解ってるのか?
85 : uwsc??
86 : >>83 申し訳ないです。VBAに関するスレッドが見つからなかったもので、書き込んでしまいました。 >>84 申し訳ないです。質問スレ等が見つからなかったのでお邪魔な書き込みをしてしまいました。 許してください・・ >>85 KMmacroというのを使っております
87 : それVBAじゃないみたいだけどVBAってなんだか分かってる?
88 : >>87 そうなんですか!?オフィス上で自動化の作業をマクロを組んでおけば自動化してくれるものだと思っていました。
89 : 81です、すごくお邪魔になるので自分はここから出て行きます。ご迷惑おかけしました。
90 : もう見てないだろうけどスレどころか板違い こっちね http://hibari.2ch.net/software/
91 : OS:Windows 7 (64bit) Excel: Excel 2007 officetanaka.net/excel/vba/tips/tips20.htm クリップボードの使い方自体が分からなかったので、ここの ダイレクトに格納/取得するを見てコピーできるようにはできたのですが、 Windowsのメモ帳でテストしてOKだったので、ペーストしたいソフトの方に ペーストをしてみたら何もペーストされませんでした。 調べてみたところ、下の通り普通のテキスト?ではないようなので、 Unicode非対応のソフトにテキストをペーストできるようにしたいのですが、 UnicodeからShift-JISへの変換はどのようにすればいいのでしょうか? dzone.sakura.ne.jp/blog/2009/12/excel-vba.html よろしくお願いします。
92 : >>91 そこまで分かってるなら普通にUnicodeからShift-JISに変換するだけ Msgbox LenB("a") '結果は2 Msgbox LenB(StrConv("a", vbfFromUnicode)) '結果は1
93 : >>92 レスありがとうございます。 その、UnicodeからShift-JISへの変換が分からないのです。 たとえば、A1のセルに「あいうえお」と入力されていて、 下記のようにしても、ペーストできるようにはなるのですが、 ?????という文字になってしまいます。 Dim buf As String Dim CB As New DataObject Dim myStr myStr = Sheet1.Cells(1, 1) buf = StrConv(myStr, vbFromUnicode) With CB .SetText buf ''変数のデータをDataObjectに格納する .PutInClipboard ''DataObjectのデータをクリップボードに格納する End With 度々すみませんが、よろしくお願いします。
94 : クリップボードってWin32APIレベルではデータの種別も持つようになってるんだけど DataObjectってその辺設定するプロパティないよね もしかしてunicode固定なんじゃないの?
95 : ClipboardFormats
96 : それは読み取り専用プロパティでしょ
97 : >>91 >>93 関係あるかわからないけど VB6の記事だけど こんなんみつけた Microsoft Formsでのクリップボード操作のバグ? http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?mode=allread&no=14459
98 : >Forms 2.0 の MSForms.DataObject の SetText メソッドを用いていた場合、 >CF_TEXT 形式のデータが正しく出力されないようです。 だめぽいね
99 : WindowsVista Wxcel2007 おはようございます。VBA歴半年の初心者です。 ユーザーフォーム上に配置した4つのチェックボックスのONOFFによって、 同じユーザーフォームに配置したリストボックスに表示されたデータにソートをかけて表示させる処理を作ったのですが、どういうわけか、この処理が実行されるたびに、リストボックスのサイズ(Height?)が少しずつ下から減っていきます。 理由が分からず、対応方法が思いつきません。 識者の方々、ご指導願います。
100read 1read 1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲