1 名前:デフォルトの名無しさん mailto:sage [2012/08/19(日) 17:01:50.51 ] 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 質問スレ Part25 toro.2ch.net/test/read.cgi/tech/1341722983/
57 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 17:22:08.78 ] ExcelVBAの型変換について疑問がありますので、詳しい方、ご教示ください。 ExcelVBAでは、文字型の数値が、代入先の型に自動的に変換されるものと漠然と思っていました。 以下のようにサンプルを作ってテストしてみましたが一貫しない結果がでました。 Test1は、文字列が数値化されて数値の合計が表示されました。 しかし、Test2では、文字列の連結として表示しました。 さらに、宣言文の(**)の部分を、Dim Int3, Int4, n As Long からDim Int3, Int4 As Long としてnを除くと、正常に数値として加算されました。 このように変わるのはどうしてでしょうか? 原因がわからないと安心してマクロを組めないのでよろしくご教示ください。 (WindowsXP Excel2007です) Sub 型変換テスト() Dim Int1, Int2 As Long '(*) Dim Int3, Int4, n As Long '(**) Dim Sum1, Sum2 As Long ' ******* Test 1 ************ Int1 = "1827" Int2 = "1931" Sum1 = Int1 + Int2 MsgBox ("Test 1 = " & Sum1) ' ******* Test 2 ************ Int3 = "1827" Int4 = "1931" Sum2 = Int3 + Int4 MsgBox ("Test 2 = " & Sum2) '文字列の連結 End Sub
58 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 17:32:32.39 ] >>57 ちゃんと宣言されてないよ
59 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 17:33:16.19 ] 初心者がよくハマるやつだな Dim Int1, Int2 As Long Int1は型指定無し、Int2はLong型 Dim Int3, Int4, n As Long Int3, Int4は型指定無し、nはLong型 Dim Int3 As Long, Int4 As Long, n As Long Int3, Int4, n全部Long型 型はひとつひとつ指定しないとダメ Dim Int3, Int4, n As Long だと最後のnしか型指定してないことになる 型指定無し(Valiant型)だと、代入した値依存の内部型になるから Intのつもりで実はstr3 + str4をやっていたというわけだ
60 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 18:25:24.46 ] 初心者じゃ無いつもりだけど未だに分からないのがdecimal。 なんで宣言出来ないんだ??
61 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 18:49:27.72 ] >>60 仕様に対して「なんで」って言い出したらキリがない
62 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 18:50:38.91 ] 現在、10 進型はバリアント型 (Variant) の内部処理形式でのみ使用できます。変数を 10 進型として宣言することはできません ってヘルプに書いてあるから、そういう仕様だとしか
63 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 19:10:26.70 ] ある程度割り切りも必要だけど、 何事にも疑問を持って追求しようとする姿勢が無いとダメだよ。
64 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 19:33:44.95 ] 調べれば仕様だって事はすぐわかるんだが、追及なんて全くしてないだろ なんでそういう仕様なのか考えるのはまだ意味があるかもしれんが
65 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 21:27:58.33 ] 一応Currency型があるから。 誰も覚えてなさそうだけどw
66 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 21:29:55.49 ] 57です 59様、ありがとうございます。 てっきり複数列挙してもまとめて型宣言できるものと思っていました。
67 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 22:39:09.50 ] セルにAlt+Enterで改行したデータを ユーザーフォームのTextboxに入れようとしても 改行してくれないんですね。 何かいい方法はないですか?
68 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 22:44:36.80 ] >>67 たぶん MultiLineがFalseになってるだけだと
69 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 23:10:05.12 ] >>68 ありがとう!
70 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 03:13:42.98 ] >>63 追求する意味があるものと無いものを見極める能力も無いとダメだよ 何も解ってない状態で割り切って諦めるのと、追求する意味がないことを見極めて 無駄な愚考をしないのは違うからね
71 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 09:14:57.64 ] おまいらが作ったクラスモジュール教えてくれ 使える、別のアプリ専用、面白い、誰得と何でもいいわ
72 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 09:46:58.31 ] >>71 具体性のない質問というかネタクレクレはスレ違い >>2 でも行くかググって漁れ
73 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 19:11:36.33 ] ソート用クラスなら。 並び替えられるデータは数字の入った配列で、 比較メソッドはイベントとして使う側で実装する形。 数字=インデックスとして見れば、どんな内容のソートにでも使える。
74 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 23:09:08.58 ] 入力データを取り込むのに Dim ttl As String If TypeName(buf) = "String" Then ttl = InputBox("タイトルを入力", title:="タイトル入力", Default:=buf) ←bufは事前にクリップボードからセット Else ttl1 = "" End If と言うのを作ったのですが、これだと1度に1つの文字列しか取り込めません 1つのダイアログを表示して入力箇所を2つ表示し 同時に2つの文字列を取り込む場合どうすればよいのでしょうか?
75 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 23:19:45.24 ] ユーザーフォーム使えば良いだけだと思うよ
76 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 23:40:00.07 ] 使う方が嫌じゃなければカンマで区切るとか
77 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 23:54:40.85 ] あとはforで二回まわすとか? ユーザーフォームが一番スマートだと思うけどね
78 名前:74 mailto:sage [2012/08/27(月) 00:50:32.74 ] ユーザーフォームって本を買ってきてVBを独学したときに作った記憶があるな クリップボードから拾わせた文字列を入力の初期値にして 文字列を入力したらVBに取り込んで シートのフィルターの指定フィールドで抽出させるというのを作ったんだけど やっぱり複数の文字列で同時にフィルターを掛けたいときが時々ある 同じ内容なんだけど、入力した時期によってキーワードが違っているときとか
79 名前:デフォルトの名無しさん mailto:sage [2012/08/27(月) 01:07:36.07 ] 解読しづらい文章だな
80 名前:デフォルトの名無しさん mailto:sage [2012/08/27(月) 21:04:53.28 ] 各セルの文中の最初に「★」がついてるものだけを探して「★」だけを消すのはどうすればよいでしょうか 最初でないところ(文中)にも「★」が出てくることがあるので検索して丸ごと置換というわけにもいかず困っています よろしくお願いします
81 名前:デフォルトの名無しさん mailto:sage [2012/08/27(月) 21:21:09.13 ] >>80 Range.Findで探して、Mid$関数で消せば良いんじゃないか? その条件ならワイルドカードが使えるし。
82 名前:デフォルトの名無しさん mailto:sage [2012/08/27(月) 22:37:49.14 ] Selection.Replace What:="★*", Replacement:="", LookAt:=xlWhole, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False たんに全体一致で"★*"を""で置き換えるだけだが。VBAいらね
83 名前:デフォルトの名無しさん mailto:sage [2012/08/27(月) 23:58:40.21 ] >>80 ↑ので充分だと思うけど もし範囲が決まっているなら Sub test() Dim r As Range For Each r In Range("A1:B5") If r Like "★*" Then r = Replace(r, "★", "", 1, 1) Next r End Sub でもどうだろうか
84 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 00:23:11.36 ] if instr(hoge,"★") = 1 then right(hoge,len(hoge)-1)
85 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 05:54:18.56 ] エクセルでwavファイルを取り込んでmp3で保存することは可能でしょうか?
86 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 06:18:10.50 ] 常識だろw
87 名前:デフォルトの名無しさん [2012/08/28(火) 07:15:53.67 ] >>85 エクセルでやる意味について
88 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 07:30:31.18 ] >>85 世の中広いな
89 名前:桃白白 [2012/08/28(火) 07:31:22.12 ] >>87 エクセルはみんなのツールだ。フロントエンドをこしらえるのならなかなかいんじゃないか。
90 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 07:35:55.08 ] >>85 可能だけどスレ違い
91 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 19:27:40.17 ] マクロ1でマクロ2を走らせる時、どちらも同じ変数名を使っているのですが問題ないですか? それぞれのマクロの中で値を指定していれば大丈夫ですよね? 一応動くのですがちょっと不安なので詳しく教えてください
92 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 19:29:55.84 ] 変数にはスコープって概念があってな 大丈夫かどうかはソースみないと何とも言えん
93 名前:デフォルトの名無しさん [2012/08/28(火) 19:44:37.89 ] Public変数を知らなそうなので大丈夫でしゅ
94 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 20:57:27.14 ] ユーザー定義関数の引数にrangeオブジェクトを指定した場合、 その値が数値の場合は配列に入れ直した方が処理は軽くなるのですか? 範囲は固定ではなく任意です。 環境なくて試せません。お願いします
95 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 21:15:15.96 ] 軽くって? 配列に移し替える時にループ使うから意味ないと思うけど
96 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 21:47:07.44 ] >>95 失礼しました、シートから関数を直接呼び出すと挙動が重かったので軽くとかきました。 たしかにループしたら効果半減ですね…
97 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 22:13:29.80 ] ソートの質問です Sheet1が A B C 1あ い う 2か き く 3さ し す となっていて Sheet2で関連度の表を作っていて A B C 1 さ し す 2さ 2 0 1 3し0 2 1 4す1 1 2 としています これを,Sheet1でセルを選択した時に,Sheet2の関連度を呼び出してソートするのはどのように書けばいいでしょうか 例えば,B3[し]を選択したら,Sheet2で[し]をみると関連のある順に[し][す][さ]なので Sheet1全体を A B C 1い う あ 2き く か 3し す さ と並べ替えたいのです また,このようなソートはどのようにググればやり方が出てきますか?
98 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 22:43:26.96 ] 自力で関数を書く
99 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 22:46:56.48 ] >>97 Worksheet_SelectionChangeでググってみたらどう?
100 名前:デフォルトの名無しさん mailto:sage [2012/08/29(水) 00:56:26.02 ] >>94-96 Variant型変数にRangeの値を代入するならループなんて不要 ためしにこんなん書いてみたらTest1よりTest2のほうが10倍以上速かった Sub Test1() Dim I&, J&, T As Date, R As Range T = Now Set R = Cells(1, 1).Resize(65535, 100) For I = 1 To 65535 For J = 1 To 100 R.Cells(I, J) = I + J Next J Next I Set R = Nothing T = Now - T Cells(1, 1) = Format(T, "hh:mm:ss") End Sub Sub Test2() Dim I&, J&, T As Date, R As Range, V As Variant T = Now Set R = Cells(1, 1).Resize(65535, 100) V = R For I = 1 To 65535 For J = 1 To 100 V(I, J) = I + J Next J Next I R = V Set R = Nothing T = Now - T Cells(1, 1) = Format(T, "hh:mm:ss") End Sub
101 名前:デフォルトの名無しさん mailto:sage [2012/08/29(水) 00:57:03.37 ] >>96 ユーザー定義だとどう書いても重いよね
102 名前:デフォルトの名無しさん mailto:sage [2012/08/29(水) 07:25:09.73 ] >>100 ありがとうございます。 引数をvariantにしてしまえばいいのですかね。 試してみます。 >>101 エクセル使う人は、直感的使いたいようで。 配列数式とか駆使して挙動みながら無理のない範囲で作るしかないですよね。
103 名前:桃白白 [2012/08/29(水) 11:37:02.40 ] >>97 Friendpaste - SortWithForeinKey https://friendpaste.com/2SD94Big6C5rrUcyFYuphe 桃白白が全力で実装したから試してみて
104 名前:デフォルトの名無しさん mailto:sage [2012/08/30(木) 15:06:34.82 ] VBA勉強して2日目のド初心者です www.dotup.org/uploda/www.dotup.org3367663.jpg 画像のように、2ページに分かれてそれぞれテキストボックスオブジェクトが2つ有り 上部のボタンを押すと各テキストをテキストファイルとして保存する という処理を作りたいのですが 1ページだけなら strREC = ActiveSheet.Shapes.Range(Array("Text Box 7")).TextFrame.Characters.Text Print #intFreeFile, strREC という風にして実装できたのですが、 2ページ目にあるテキストボックスオブジェクトを指定する方法が分かりません。 やり方のヒントを教えて下さい。
105 名前:デフォルトの名無しさん mailto:sage [2012/08/30(木) 15:23:23.59 ] ド素人すぎてクラクラするなw
106 名前:デフォルトの名無しさん mailto:sage [2012/08/30(木) 16:23:19.37 ] そんなこと言うくらいなら教えてあげなよ
107 名前:デフォルトの名無しさん mailto:sage [2012/08/30(木) 16:27:27.69 ] for eachで回せばいいんだよ
108 名前:桃白白 [2012/08/30(木) 17:52:44.75 ] >>104 画像ではText Box 7って2ページ目のテキストボックスなんでない? ページ変わってもテキストボックス取得する方法は変わらんだろ テキストボックスを選択したら左上にテキストボックスの名前が表示されるから、そこに桃白白と入力して ActiveSheet.Shapes("桃白白").TextFrame.Characters.Textでいけるっしょ
109 名前:デフォルトの名無しさん mailto:sage [2012/08/30(木) 23:44:46.08 ] 対象のブックが開いているか調べるのにはどうしたらいいですか? もし、開いていたらそのままシートの内容をコピーして、 開いていなかったら、開いてコピー後、対象ブックを閉じる というのをやりたいです。
110 名前:デフォルトの名無しさん mailto:sage [2012/08/30(木) 23:53:28.43 ] 馬鹿には無理
111 名前:桃白白 [2012/08/31(金) 00:02:07.39 ] >>109 For Eachでぐーるぐる Sub TestFindWorkbook() Dim book As Workbook Set book = FindWorkbook("C:\Users\a\Documents\桃白白.xlsm") : End Sub Function FindWorkbook(ByVal fullName As String) As Workbook Dim w As Workbook For Each w In Excel.Workbooks If (w.fullName = fullName) Then Set FindWorkbook = w Exit Function End If Next Set FindWorkbook = Nothing End Function
112 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 00:33:06.46 ] Windows XP / Excel 2003 環境にて質問です。 A.xls が直接開かれたか、他ブック(B.xls、C.xls、D.xls)から VBA-Workbooks.Openで開かれたかを A.xls側から判断するのに適した方法ご教示願います。 今現在の方法としては、AにWorkbook_Open時に開いているブック名を調べ、 B、C、Dに該当するファイル名が開かれたら、他ブックより開かれた。と判定させています。 (偶然ですが>109-111さんの流れのようなもの) ただしこの場合だとAを直接開く際、Bが既に起動中でも該当してしまいます。 条件として個人用マクロは使用せずにてクリアしたく、よろしくお願いします。
113 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 07:10:08.53 ] 馬鹿には無理
114 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 08:24:31.30 ] Auto_Open が走るかどうかで判定できる気がする
115 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 08:44:54.04 ] >>112 A.xls側が判断するタイミングはいつ?いつでも?
116 名前:デフォルトの名無しさん [2012/08/31(金) 09:55:33.99 ] >>112 他ブックからオープンしたときは A.xlsのどこか任意のセルにその呼び出し元を記述させるようにしたら良いんでない? たとえばB.xlsからオープンしたら Workbooks.open(A.xls) Activeworkbook.sheets(1).cells(1,1)="B.xls" みたいに
117 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 10:34:50.97 ] www.officiallyjd.com/wp-content/uploads/2012/06/20120618_kinashi_15.jpg
118 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 12:16:22.91 ] >>112 www.moug.net/tech/exvba/0060076.html これ参考にならないかな?
119 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 16:48:56.27 ] 質問です 変数 = A1.value A1のセルには、文字列helpme となっているところを A1にhelp A2にme としたとき、 変数= なんて.value書けばいいですか?
120 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 17:13:04.83 ] range("a1").value & range("a2).value ってことか?
121 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 17:13:52.47 ] >>119 質問するならちゃんとしたコードで書いてよ 普通に考えて 変数 = A1.value は「セルA1の値を変数に代入する」という意味のコードとしては まともなコードとはいえない これが「セルA1の値を変数に代入する」という意味のコードとして成立するためには 表記中の「A1」が「セルA1を意味するオブジェクト変数」である必要があるけど それは>>119 の質問内容からは確定できない ちゃんと動作するコードとして書くなら 変数 = Cells("A1").Value みたいに書いてないとおかしい で、そういう意味であるなら 変数 = Cells("A1").Value & Cells("A2").Value とすれば要求を満たせる
122 名前:桃白白 [2012/08/31(金) 17:25:14.21 ] もしくはこうか Range("A2") = Right(Range("A1"), 2) Range("A1") = Left(Range("A1"), 4)
123 名前:デフォルトの名無しさん [2012/08/31(金) 17:41:04.79 ] >>122 それは意味が違うんじゃない?
124 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 18:30:31.90 ] お前ら相変わらずエスパーだな俺には何言ってるのかわからん
125 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 18:40:22.16 ] >>124 >>119 は意味分からんでもそれへの回答で理解できただろ
126 名前:112 mailto:sage [2012/08/31(金) 20:04:45.71 ] >>115 Aが呼び出されて直後の必要があります。 Workbook_Open起動時に本来やるべき処理があって、 それを実行する条件として、BCDから開かれたときのみとしたい。 という感じです。(直接起動時は実行したくない) >>116 ちょうど↑の内容に絡む分ですが、オープンした後だと 分岐条件作る前にAのWorkbook_Openが走ってしまうのでダメでした。 >>118 読み取り専用に関する内容でした。 少し今回の件とは異なるように見受けられました。 >>115-118 ありがとうございました。 何か他の手を考えてみようと思います。 ってレス書いているホント今。思い浮かびました。 >116の内容をAじゃなく、開きに行くブックBCD自身にすればいいのですね。 Aを開く処理時に自ブックのCells(1,1)="flag"として Aが開いたらCells(1,1)=""にする。 AからはBCDの存在調査じゃなく、BCD存在調査後、cells1,1の値を調べさせればいいのですね。 if Cells(1,1)="flag" then マクロから起動。 else 自己起動。見たいに。 どうもありがとうございました。
127 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 20:12:25.23 ] >>120 これでできますた!!!ありがとう!
128 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 20:16:13.19 ] こんにちは!質問です! エクセルファイルを開いている日(毎日)からみて次の月曜日の日付を取得するにはどうすればいいですか? つまり火曜日に開いても木曜日に開いても来週の月曜日の日付を表示し、来週には再来週の日付を表示するということです。
129 名前:112 mailto:sage [2012/08/31(金) 20:31:39.46 ] >>128 =TODAY()+9-WEEKDAY(TODAY()) 月曜日に開いた場合の処理が指示されていないから、そこはつけたしてくだしあ。
130 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 20:34:43.70 ] name消し漏れ+ 日曜日の判定も必要ですな。>129だと不完全です。 WEEKDAY(TODAY()) = 0と1のとき分岐してください。
131 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 21:13:03.84 ] >>126 >>114 はダメだったのか?
132 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 21:14:54.31 ] セルに文字としてプラスの記号入れ方教えてください。
133 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 21:17:13.60 ] >>132 全角文字で
134 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 21:18:26.75 ] ありがとうございます
135 名前:デフォルトの名無しさん mailto:sage [2012/09/01(土) 00:26:56.53 ] >>130 これってどういう意味?
136 名前:デフォルトの名無しさん mailto:sage [2012/09/01(土) 00:36:13.97 ] 多分解決しますた
137 名前:>112 >126 mailto:sage [2012/09/02(日) 03:17:58.59 ] >>131 (>>114 ) 初めて知りました。 できそうですね。 ありがとうございます。
138 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 21:54:53.26 ] 選択セルの日付が今日を過ぎていたら赤文字、でなければ黒文字 をマクロにしようと思い、以下を書いた Dim cell As Range For Each cell In Selection If cell.Value >= Date Then cell.Font.ColorIndex = 3 Else cell.Font.ColorIndex = 1 End Next 実行するとNextに対するForが無いと言われる If〜Endをコメントブロックすると、ループは廻ります、何がいけないのでしょうか?
139 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 22:03:18.22 ] ×End ○End If
140 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 22:03:38.33 ] >>138 end じゃなく end ifでは?
141 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 22:04:45.00 ] >>138 最後から2行目の「End」は「End If」でしょ。
142 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 22:13:18.95 ] あっ!ミスってた 有り難うみんな
143 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 23:06:48.44 ] ここって資格試験について質問しても大丈夫でしょうか? 公式テキストの解答で1つ理解できないものがありまして・・・。
144 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 23:13:57.52 ] 既に終った試験だとしても、出題内容をこういうところで漏らすことが 非常識な行動じゃないと思えるほどのバカなら好きにしたらいいさ。
145 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 23:48:20.43 ] >>144 いや、実際の試験では無くて公式テキストのサンプル問題です。 ちょっと理屈が良く分からない部分がありまして。
146 名前:デフォルトの名無しさん mailto:sage [2012/09/03(月) 00:14:38.18 ] 何でも良いから晴れよ
147 名前:デフォルトの名無しさん mailto:sage [2012/09/03(月) 01:33:06.43 ] 福沢諭吉「脱亜論」 1885年3月16日 時事新報 日本の不幸は中国と朝鮮だ。 この二国の人々も日本人と同じく漢字文化圏に属し、同じ古典を共有しているが、 もともと人種的に異なるのか、教育に差があるのか、 日本との精神的隔たりはあまりにも大きい。 地球規模で情報が行き来する時代にあって、近代文明や国際法について知りながら、 過去に拘り続ける中国・朝鮮の精神は千年前と違わない。 国際的な紛争の場面でも「悪いのはお前の方だ」と開き直って恥じることもない。 もはや、この二国が国際的な常識を身につけることを期待してはならない。 「東アジア共同体」の一員として その繁栄に与ってくれるなどという幻想は捨てるべきである。 日本は、大陸や半島との関係を絶ち、 欧米と共に進まなければならない。 ただ隣国だからという理由だけで特別な感情を持って接してはならない。 この二国に対しても、国際的な常識に従い、国際法に則って接すればよい。 悪友の悪事を見逃す者は、共に悪名を逃れ得ない。 私は気持ちにおいては「東アジア」の悪友と絶交するものである。 _,,,,,,__ __,,,__ ィjj)))))))))!!!!!彡ヽ, /ミ/ ,}彡ヘ |ミ{ -‐ ‐ ‐ ‐- {三=| El==; ゚ ''==. |ミミ,| `レfォ、,〉 :rfォ.、, !iル┤ . { `¨ i ・、¨ ´ `{ゞ'} 支那、朝鮮とは . | '`!!^'ヽ .「´ 付き合うなと忠告しておいたのに。。。 ! ,-ニ'¬-、 ,!|,_ . \´?` / ∧ヘ、 __/〉`ー ' ´ / 〉 \ _, ィ´「∧ / / 」¬ー- 、_ -‐ ´ / / ヽ、/ / iヾ ヽ
148 名前:デフォルトの名無しさん mailto:sage [2012/09/03(月) 14:20:50.18 ] >>144 公式テキストの問題と解答をまるごとここに書くのならともかく、納得できない一問について ここに書くことのどこに問題があるのか?
149 名前:桃白白 [2012/09/03(月) 15:19:53.53 ] 引用の範疇なら問題ないだろ VBAの設問なのか? 何だったら桃白白がお答えしちゃうけど? 貼っちゃいなよ
150 名前:デフォルトの名無しさん mailto:sage [2012/09/03(月) 20:55:59.52 ] >>145 気になるから貼ってくれよ
151 名前:デフォルトの名無しさん [2012/09/03(月) 21:54:07.61 ] 質問です。環境はwindows XP , Excel2003です エクセルファイルをメールで送信するコード、つまり Application.Dialogs(xlDialogSendMail).Show を使いましてメールを送信する際、引数の"Arg1"つまり「メール宛先」に 複数人のアドレスを入れる関係上、宛先文字列が256文字を超えてしまいます。 255文字以内に収めれば、上手くメーラーが起動してメール送信準備が されるのですが、256文字を超えると、エラーが出るわけでもなく ただメールが立ち上がらないという状態になります。 対策をする前に、なぜここで256文字を超えたらダメなのか、を一応 知っておきたいです。どなたか、知っていたら教えてください!
152 名前:デフォルトの名無しさん mailto:sage [2012/09/03(月) 22:24:12.60 ] >>151 容量的な問題255バイトまで
153 名前:デフォルトの名無しさん mailto:sage [2012/09/03(月) 22:27:48.90 ] ExcelVBAでLifeGameを作った( https://www.dropbox.com/s/kntdvpijtpdje90/LifeGame.xlsm ) のですが、10世代ぐらいループさせるとExcelが固まります 何が原因か教えていただけませんか? Windows 7 Ult x64、Excel 2010です
154 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 00:07:02.26 ] 多量のテーブルデータがあったとして、 ワークシートとデータベースって どっちを使おうっていう判断基準を教えてください ファイルサイズを考えて、どちらも外部ファイルにデータを置くとした場合。
155 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 00:24:44.36 ] >>154 具体例を挙げてくれれば助言はできるけど そんなもん一概に言えないよ
156 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 00:30:58.40 ] データ数が1万レコード以上ある時はアクセスを使うべき
157 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 00:40:54.73 ] >>155 1000×3ぐらいの数値テーブルが、数十個あって ランダムな場所を幾度も読み込んで計算するような感じです 速度が求められます シートにおさまるんだけど、どちらがいいのかな〜と。
158 名前:157 mailto:sage [2012/09/04(火) 00:48:49.04 ] ちなみに、今はワークシートのデータをdllに投げて、処理して値を受け取るようにしているんだけど、 配布やら設定やらの問題でvbaで完結させたい。
159 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 01:03:28.50 ] アクセスじゃなくてエクセルでdbやってみりゃいいじゃん
160 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 01:19:21.98 ] メモリに乗りきらないとか、ワークシートに収まらないほどのデータがあるならDB それ以外なら好きにしろ
161 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 04:33:32.77 ] >>157 その程度のデータ量なら配列に一気に読み込んでから計算するのが一番処理が速い
162 名前:桃白白 [2012/09/04(火) 05:52:03.40 ] >>153 スリープのあとにDoEventsを呼ぶようにしたら 10000回ループしても問題なかったよ Call VBA.Interaction.DoEvents 理屈は知らん、寝るのに忙しくて表示を更新できません的なことなんじゃね
163 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 06:51:00.28 ] 何かというと配列云々をいうアホがいるがそれだけじゃまったく不十分 アルゴリズムの方が大事だ
164 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 07:11:04.98 ] アルゴリズムの方も大事だ、だろ シートとのやり取りのコストも、これはこれで馬鹿にならないよ。 >>153 x64Win8+Excel2013で動かしてみたけど固まりはしないな。 ただ、ESCキーでの実行中断が何故か効かなくなった。
165 名前:153 mailto:sage [2012/09/04(火) 07:57:06.49 ] >>162 固まらなくなりました。ありがとうございます ちょっと理屈調べてみたいと思います >>164 環境にもよるみたいですね。テストありがとうございました
166 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 09:26:27.40 ] >>153 余計なお世話かも知れないが、 プログラムが動作するしない以前の問題として 変数の宣言が間違ってる。 dim a,b as integer だと、aがVariant型、bがInteger型になる。 あと、変数名間違ってるのが数カ所あった。 Option Expricitで変数の宣言を強制する癖をつけた方が良いと思う。
167 名前:166 mailto:sage [2012/09/04(火) 09:31:39.92 ] 綴り間違えた ×Expricit ○Explicit
168 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 18:33:21.31 ] これは恥ずかしい。
169 名前:151 [2012/09/04(火) 18:52:25.13 ] >>152 ありがとうございます。その255バイトまでっていうのが 何の仕様なのかが、どうも掴めなくて気持ち悪いんです。 変数の型はバリアントにしているので、変数の型によって255バイト っていう制限がかかるわけじゃないし Application.Dialogs(xlDialogSendMail).Show の引数は255バイト までと決まっている(仕様)、ということなんでしょうか?
170 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 19:26:37.09 ] >>169 メールのtoフィールドが255バイト以下ってのはRFCで決まってたはず それ以上送りたい場合はtoフィールド自体の数を増やせばいいんだけど、 受け取った側から見るとあんまり気分の良い物じゃないのでBCCなどを使った方がいい
171 名前:桃白白 [2012/09/04(火) 20:06:56.45 ] >>170 マジで!? メールアドレスの最大の長さが255文字でTOが複数のアドレスを含むことが できるとするなら理屈としてはTOは255文字以上を許容しないといけないんじゃね? >>151 配列でアドレスを指定できるんじゃね? Application.Dialogs(xlDialogSendMail).Show Array("桃白白さん", "ブルマさん") みたいにして
172 名前:153 mailto:sage [2012/09/04(火) 20:29:08.45 ] >>166 まじかよVBA糞だな首吊ってきます
173 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 23:30:33.17 ] >>169 自作鯖ならsendmailmaxなんちゃらみたいな設定がたぶんhtod.confとかにあると 思ったけど to Cc Bccでの上限数はあまり変わらないんじゃないか
174 名前:デフォルトの名無しさん mailto:sage [2012/09/05(水) 00:43:55.42 ] >>172 VBAがというか大本のVBがそういう仕様だからなぁ つか知らなきゃそう書いちゃうよな
175 名前:デフォルトの名無しさん mailto:sage [2012/09/07(金) 12:02:31.87 ] 質問です。 For shapeCounter = 0 To .Shapes.Count --- (※) Dim tempShape As Shape Set tempShape = mySheet.Shapes(shapeCounter) (略) Next このようにShapeオブジェクトを取得していたのですが、 別のマシンで動作させると3行目で停止してしまいます。 そこで、(※)を For shapeCounter = 1 To .Shapes.Count + 1 に変えると正常に動作しました。 officeのバージョンによってこのような事が起こるのでしょうか? もしそうだとしたらどこかにその情報のソースは無いでしょうか?
176 名前:デフォルトの名無しさん [2012/09/07(金) 12:47:57.33 ] ExcelのVBAについて学ぼうと思っています。 まだまだ初心者なので、VBAについてお詳しい方、 ExcelのVBAでのテーブル作成方法を教えてください。
177 名前:デフォルトの名無しさん [2012/09/07(金) 12:51:57.92 ] ↑入力項目は@入力年月日A転出入りフラグ1、転入2、転出(選択すると自動的にカウントアップ)B氏名C新住所D性別 E年齢F生年月日F職業G男性人口±H女性人口±I全体の人口±といったところです。 このデーターを格納し帳票に飛ばしカウントアップしてデイリー分の男性、女性の転出、転入を出力データとしてまとめ 総人口数を求めるようにしたいのですが。
178 名前:デフォルトの名無しさん mailto:sage [2012/09/07(金) 13:06:18.19 ] 馬鹿には無理
179 名前:桃白白 [2012/09/07(金) 13:34:55.59 ] >>175 Excel 2007 で Shapes オブジェクトのインデックスに不正な値 0 を指定してもエラーにならない support.microsoft.com/kb/2699812/ja これかな。 For Toでぐるぐるするなら For shapeCount = 1 To .Shapes.Count にしないと0からCountまでぐるぐるしたらCount + 1のShapeが存在することになっちゃう。 Shapesオブジェクトの実装はたぶん線形リストで 序数が大きくなるほどアクセスするのに時間がかかるから For Eachでぐるぐるしたほうがいいよ。 For Each tempShape In .Shapes Next
180 名前:桃白白 [2012/09/07(金) 13:39:04.73 ] >>176 データベースがメインになるんなら Accessでやっちゃった方がよくね?
181 名前:デフォルトの名無しさん mailto:sage [2012/09/07(金) 13:58:48.61 ] access高いから避けたい
182 名前:桃白白 [2012/09/07(金) 14:17:45.26 ] >>181 データベースに何を使うかは決まってんの? MDB?
183 名前:デフォルトの名無しさん mailto:sage [2012/09/07(金) 15:37:49.26 ] PostgreSQLが良い
184 名前:桃白白 [2012/09/07(金) 19:38:37.15 ] >>183 ゾウさんのやつな、かっけーよな
185 名前:デフォルトの名無しさん mailto:sage [2012/09/08(土) 02:27:32.71 ] 教えて下さい。 excel vba でIE object のコントロールで ajaxを起動できますか? fireeventでjavascriptはわかったのですが selectにonclickがなくajaxでload window しているものがありどう呼び出せばよいか 悩んでます
186 名前:デフォルトの名無しさん mailto:sage [2012/09/08(土) 04:45:25.16 ] ★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で出来ることは全てスレ違いだと思ってください。
187 名前:デフォルトの名無しさん [2012/09/08(土) 08:35:29.78 ] 重ねたバケツが抜けないのですが、何か良い方法はあるでしょうか?
188 名前:デフォルトの名無しさん [2012/09/08(土) 09:29:19.83 ] 外側のバケツのみ熱します
189 名前:187 [2012/09/08(土) 09:30:46.59 ] どうやって熱しますか?
190 名前:デフォルトの名無しさん mailto:sage [2012/09/08(土) 09:41:15.34 ] 油を注いで熱します
191 名前:デフォルトの名無しさん mailto:sage [2012/09/08(土) 09:48:31.79 ] >>185 的外れかもしれないけどブックマークレットで呼ぶとか? shokai.org/blog/archives/1234
192 名前:デフォルトの名無しさん mailto:sage [2012/09/08(土) 20:57:56.13 ] >>177 DAOとかADOとかでExcelをRDBみたいにSQLで扱えるから そういう感じでやれば良いんでね やり方はググって好きな方法選んでくれ
193 名前:桃白白 [2012/09/09(日) 01:50:11.99 ] みんな聞いて。桃白白のExcelの使用期限が終わりそう、繰り返す、桃白白のExcelの使用期限が終わりそう。
194 名前:デフォルトの名無しさん mailto:sage [2012/09/09(日) 02:17:54.45 ] Excelって使用期限が設けられているライセンス体系もあったんか 次買うときはケチらずに無期限ライセンスのを買えよ
195 名前:桃白白 [2012/09/09(日) 02:27:17.22 ] >>194 桃白白貧乏だから買えないの。寄付する? するんだったら桃白白はその好意を決して断らない ことをここに誓う用意があるけど?
196 名前:デフォルトの名無しさん mailto:sage [2012/09/09(日) 04:13:41.72 ] パソコンをリカバリすればまた体験版が使えるようになるよ
197 名前:デフォルトの名無しさん [2012/09/09(日) 07:12:31.16 ] >>195 互換Office使えばタダだよ VBA使えないけど
198 名前:デフォルトの名無しさん mailto:sage [2012/09/09(日) 07:31:11.37 ] 貧乏だけど知識が豊富で頭も良くて有用な回答者にならOfficeくらい寄付してもいいが、 貧乏な上に知識も多少の回答は出来るが並以下レベルで、頭の回転も弱い奴となると、 べつに回答者を続けてくれなくても誰も困らないから、Excelの使用期限と共に消えてくれて 一向に構わないな
199 名前:桃白白 [2012/09/09(日) 10:38:47.13 ] ∧∧ /⌒ヽ) i三 ∪ ○三 | (/~∪ 三三 三三 三三三
200 名前:デフォルトの名無しさん [2012/09/09(日) 15:24:00.49 ] >>199 俺も貧乏だから寄付しないけどタオパイパイ嫌いじゃないよ これからは回答せずに にぎやかしでAA貼ってりゃいいじゃん
201 名前:デフォルトの名無しさん mailto:sage [2012/09/09(日) 15:26:03.47 ] 私の声がデムパになって 波になってあなたへ向かってく 私の歌がデムパになって 波になってあなたへ響いてく 私の愛がデムパになって 波になってあなたへ届いてく 私の電子回路が短絡する前に Electric LOVE Electric LOVE (∩ ゚д゚) アーアー この気持ちあなたに届くかな
202 名前:デフォルトの名無しさん [2012/09/10(月) 11:09:37.38 ] VBAであるセル範囲をコピペして他のシートに貼り付けたとき 図のオブジェクトがどういうわけかコピペされないんです。 どうすればこの図のオブジェクトも正しくコピペされて他のシートにも表示させるようにできますか?
203 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 11:21:30.08 ] 馬鹿には無理
204 名前:202 [2012/09/10(月) 11:31:04.49 ] >>203 みたいな馬鹿には回答は無理なのは分かりますよ。
205 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 11:37:58.19 ] ただ図がセル範囲からはみ出してるだけじゃないのか?
206 名前:202 [2012/09/10(月) 11:40:24.57 ] いえ、しっかりセル範囲内におさまっています。 列は3、行は20くらい、 図はちょうどど真ん中あたりにあり、1つのセルと同じくらいの大きさなのに。
207 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 14:03:16.08 ] 2007以降だっけ、図形や画像のオブジェクト仕様が変わってるから その影響じゃね確かめてないけど
208 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 14:23:25.83 ] >>202 コードも貼らずに・・・VBAでコピペといっても丸ごと・値だけ・図だけ・云々 値だけコピぺのコードになっていないか?
209 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 15:30:15.55 ] 再現できたよ import os import win32com.client def test_auto_shape(filename): xl = win32com.client.Dispatch('Excel.Application') xl.Visible = True try: book = xl.Workbooks.Open(filename) sheet = book.Worksheets(2) rs = "A10:D20" sheet.Select() sheet.Range(rs).Select() xl.Selection.Copy() sheet = book.Worksheets(1) sheet.Select() sheet.Range(rs).Select() xl.Selection.PasteSpecial() finally: xl.Workbooks.Close() xl.Quit() if __name__ == '__main__': test_auto_shape(os.path.abspath(u'autoshape_copy.xls'))
210 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 15:36:44.24 ] きもっ
211 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 15:39:18.22 ] こっちのコードなら図形も正しくコピペされたよ import os import win32com.client def test_auto_shape(filename): xl = win32com.client.Dispatch('Excel.Application') xl.Visible = True try: book = xl.Workbooks.Open(filename) sheet = book.Worksheets(2) rs = "A10:D20" sheet.Range(rs).Copy(book.Worksheets(1).Range(rs)) finally: xl.Workbooks.Close() xl.Quit() if __name__ == '__main__': test_auto_shape(os.path.abspath(u'autoshape_copy.xls'))
212 名前:デフォルトの名無しさん [2012/09/10(月) 15:43:04.57 ] Select って恥ずかしいよね
213 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 15:50:50.02 ] なんでVBAのコードにしないんだろう?
214 名前:デフォルトの名無しさん mailto:sage [2012/09/11(火) 11:33:18.80 ] 中二病だから