1 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 11:14:15 ] ・まじめにExcelの機能を追及してみようと思う奇特なひと ・スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと ・VBAなんていまさらやりたくないのに業務で仕方なく使っているひと ・とにかく漏れにこんな仕事まわすなと怒っているひと そんなM$大好きなひとからアンチM$なひとたちまで幅広くカバーするスレです OOoのCalcの質問もOKです 前スレ pc10.2ch.net/test/read.cgi/tech/1054356121/
328 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 07:49:42 ] >>327 マクロの記録でctrlキーを押しながら A1とA3を選択。 これで、離れたセルの指定方法は分かるだろ? 後は、定範囲内をFor Eachとかでまわして 該当セルのaddressとるなりして 同じように選択するだけ。
329 名前:デフォルトの名無しさん [2007/02/20(火) 11:06:07 ] Type MyTestType ID As Integer Name As String End Type Sub test() Dim a(3) As MyTestType '中略 i = TypeTest(a) End Sub Function TypeTest(a As Variant) As Integer '省略 End Function とコードを組むと、コンパイルエラーが出ます。 Functionの引数の型宣言で、配列を使うこともできませんが、 どのようにしたら、aをFunctionに渡すことができるでしょうか? よろしくお願いします。
330 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 11:24:55 ] VBAでどうやってコンパイルエラーを出したのか知りたいのだが。
331 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 11:39:42 ] >>329 クラスを使え >>330 メニュー > デバッグ > VBAProjectのコンパイル も知らんのか? >>329 なら普通に実行したってコンパイルエラー出るし。 もしかしてexe吐くことがコンパイルだと思ってるのかな?
332 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 12:08:03 ] >>331 クラスってどうつかえばいいのですか? プロジェクトで挿入からクラスモジュールを挿入して、 Type文を打ち込めばよろしいのでしょうか? それと、ここはsage推奨ですか?
333 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 12:16:50 ] >>332 ===== MyTestClass As クラスモジュール ===== Public ID As Integer Public Name As String ===== EOM ===== ===== Module1 As 標準モジュール ===== Sub test() Dim a(3) As New MyTestClass a(0).Name = "hoge" a(0).ID = 10 i = TypeTest(a) End Sub Function TypeTest(a() As MyTestClass) As Integer Debug.Print a(0).Name Debug.Print a(0).ID End Function ===== EOM ===== こんな感じで。 クラスモジュールの名前がAs 〜で使う宣言型になる点に注意。 > それと、ここはsage推奨ですか? 別に。回答者はageる必要が無いから慣例的にsageてるだけ。
334 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 13:40:38 ] >>333 どうもです。
335 名前:327 mailto:sage [2007/02/21(水) 02:04:24 ] マクロで記録したら文字列で指定してたからどうしたもんかと 思いましたが、addressでセル位置の座標を取れるからこれ使えばいいのかな。 問題は解決したけども、なんかほかにスマートな方法があるなら教えてくだされ。
336 名前:デフォルトの名無しさん [2007/02/21(水) 15:31:21 ] GetOpenFilename で「ファイルを開く」 ダイアログ で左側のデスクトップやマイドキュメントが選べません。どうしてでしょうか? 参照設定で、Microsoft Runtime Scriptingは選択しています。 Office2003, XP Proです。
337 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 15:49:59 ] > どうしてでしょうか? 環境が壊れてるからじゃねーの? とりあえずOSとOfficeを再インストールしてみな。 それとGetOpenFilenameはApplicationオブジェクトのメンバなんで参照設定は不要だし、 Microsoft Runtime Scriptingではなく Microsoft Scripting Runtimeだろ。これはFSOやDictionaryだからな。
338 名前:デフォルトの名無しさん [2007/02/22(木) 15:30:03 ] row = 1 For Each a In IEobj.Document.body.getElementsByTagName("A") If InStr(a.href, "xxx.com/" ) <> 0 Then x = a.href Worksheets(1).Cells(row, 1).Value = x row = row + 1 End If Next a こんな感じのURLなのですが、同じアドレスは二度書き込まない風にできますか?
339 名前:338 [2007/02/22(木) 18:01:47 ] 処理重くなるだけかな 少しぐらい重なってもいいか・・・・
340 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 19:58:29 ] >>338 普通に重複チェックして条件分岐すれば良いだけでしょ。 重複チェックにはいろんな手法があるのでお好きなもので。
341 名前:デフォルトの名無しさん [2007/02/23(金) 22:15:30 ] Dim myValue As Single myValue = 1.0 Charts(1).Name = "Ver. " & myValue としてエクセルのグラフのタイトルに、 Ver. 1.0 と入力したいのですが、Ver. 1 となります。 こういう場合は、どうすれば "1" を "1.0" と少数点付きにできますか?
342 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 22:27:30 ] As String にするか "Ver." & Format(MyValue, "0.0")で
343 名前:デフォルトの名無しさん [2007/02/23(金) 22:52:10 ] >>342 ありがとう!!! できた〜!!!!! ちなみにStringはダメでした。 ほんとにありがとう。
344 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 23:15:34 ] ああ、"1.0"にしないと駄目だろうねw
345 名前:デフォルトの名無しさん [2007/02/24(土) 01:29:23 ] Win2000 SP4ではちゃんと動いていたのにXP SP2に持っていったらエラーにはならないんですけどまともに動いてくれません 主に使っている機能はActiveXのInetです。WEBを取り込んで検索して加工した文字列をエクセルに貼り付けてるだけです。 参照設定は正規表現というやつを使いたくて、MSVBScriptRegulerExpresion1.0と5.5を二つ入れました。 1.0と5.5は両方チェック入れたらまずいんでしょうか?本にはMSVBScriptを参照設定しろと書いてあっただけなので不明です。 あとMS Internet Transfer Control 6.0とMS Internet Controls も参照設定してあります。 Win2000 SP4はVB6.0、WinXP SP2はVB6.0ランタイムが入ってます。 最初から2行あったOption Explicit ?ともう一行は文の意味がわからなかったので消しました。 XPのファイアーウォールははずしてあります。 なぜXPだけで不安定になるのか原因わかりますでしょうか?
346 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 01:33:32 ] うん、わかる
347 名前:デフォルトの名無しさん [2007/02/24(土) 01:37:51 ] ありがとうございます。試してみます。
348 名前:デフォルトの名無しさん [2007/02/24(土) 14:27:41 ] エラーの時にデバッグを選んだ後停止ボタンを押すと、フォームがひらくのですが、コード画面のままで維持できないのでしょうか? その度にいちいちコード画面を選び編集したいコードの行を探さないといけないのはつらいです。
349 名前:デフォルトの名無しさん [2007/02/24(土) 15:09:31 ] '初心者です。 Sub なんでだろう@() Dim あ As Long あ = Worksheets("Sheet1").Cells(1, 1) If あ > 3 Then Worksheets("Sheet1").Rows("1:5").Select End If End Sub 'だと動くのに Sub なんでだろうA() Dim あ As Long あ = Worksheets("Sheet1").Cells(1, 1) If あ > 3 Then Worksheets("Sheet1").Rows("1:あ").Select End If End Sub 'だと動きません。なんでだろう。。。 '親切な方教えてください。
350 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 15:37:02 ] range("1:" & あ)では?
351 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 15:48:27 ] >>349 ×Worksheets("Sheet1").Rows("1:あ").Select ○Worksheets("Sheet1").Rows("1:" & あ).Select ○Worksheets("Sheet1").Range("1:" & あ).Select ○Worksheets("Sheet1").Rows(1).Resize(あ).Select >>350 このコードを書いているモジュールによってはシートを省略しちゃうと正しく動作しないよ。 「Worksheets("Sheet1")」も書くか、「Rows以降を」と添えよう。
352 名前:349 [2007/02/24(土) 15:49:50 ] >>350 ほえ〜。動きました。 なぜだか分からないけど、とにかくこれでやってみます! ありがとうございました!
353 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 16:05:06 ] >>351 あ、RowsのつもりがRangeって打っちゃったよ
354 名前:349 [2007/02/24(土) 16:09:47 ] >>351 とにかくいろいろやり方があるんですね! どうもでした。m( )m モジュールって何?っていう段階なので、すべてがサッパリ妖精なのですが、 とにかく理解もせずに突き進んでみることにして見ます。。。
355 名前:デフォルトの名無しさん [2007/02/24(土) 19:58:05 ] エクセルのグラフの軸の書式設定にある Y/数値軸目盛の最大値のところに初期入力してある値を取得する方法ってありませんか?
356 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 20:22:45 ] 初期値は自動じゃないのか? まぁ、マクロ記録で変更してみりゃプロパティの名前がわかるだろ。
357 名前:デフォルトの名無しさん [2007/02/24(土) 20:35:27 ] >>356 自動です。 自動で入る初期値がほしいんですが、これに関しては マクロ記録でいろいろ試してみましがはわかりませんでした。
358 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 20:53:07 ] >>357 初期値変更するの記録すればわかると思うけど ActiveChart.Axes(xlValue).MaximumScale じゃない?
359 名前:デフォルトの名無しさん [2007/02/24(土) 21:14:35 ] >>358 ありがとうございます。 値の取得ができました。 初期値変更するの記録したつもりだったけど、わからなかったw
360 名前:デフォルトの名無しさん [2007/02/25(日) 14:25:00 ] あぁ〜ん、ユーザーフォームがうまく作れないよぉ〜〜〜ん!! 参考書ばかりが増えていく…
361 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 14:29:14 ] わざわざユーザーフォーム作る香具師って馬鹿じゃね? プログラミング能力の無さをさらけ出してるだけだよ。
362 名前:デフォルトの名無しさん [2007/02/25(日) 16:08:29 ] 馬鹿が馬鹿を笑う、ここはそんなスレでつw
363 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 17:30:50 ] >>361 kwsk
364 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 22:30:07 ] ユーザーフォームを×ボタンをクリックして閉じるときに、 それと同時に上書き保存をしたいのですが 何か良い方法はありますか?
365 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 22:33:26 ] >>364 UserForm_QueryCloseイベントに上書き保存のコードを書く
366 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 02:57:29 ] 動作しないユーザーフォームなら1分もかからずにちゃんと作れるよな。 これすらできないのは才能ないというかなんか根本的におかしい。
367 名前:デフォルトの名無しさん [2007/02/26(月) 04:05:54 ] >>361 の言ってる意味は全然変わらんが >>366 なら分かる
368 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 04:55:40 ] じゃ、>361はこう訂正してみよう。 >わざわざユーザーフォーム作る香具師って馬鹿じゃね? →ユーザーフォーム作るのに苦労する香具師って馬鹿じゃね?
369 名前:デフォルトの名無しさん [2007/02/26(月) 05:03:58 ] >>368 納得した ユーザーフォーム使う使わないは用途によるからな
370 名前:364 mailto:sage [2007/02/26(月) 10:09:54 ] >>365 ありがとうございます!できました! >>361 仕入・納品・在庫調べ等々、自分の仕事では ユーザーフォームないと非常に入力がめんどくさいです。 なので自力で作成しました。 まあ、「市販のソフト買えよ!」と言われればそれまでですが。
371 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 10:34:35 ] >>360 がやろうとしてることと、>>361 ,>>366 ,>>368 が指摘してることに遥かなる距離感を感じるのはなぜだろう。 >動作しないユーザーフォームなら わざわざ動作しないフォームを作る暇人っているんだな。
372 名前:デフォルトの名無しさん [2007/02/26(月) 11:47:50 ] >>370 まさかそれをアクセスでなくエクセルでやってるとか・・・
373 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 11:58:21 ] Excelが伝票というケースもあるだろ。Accessの仕事しかやったことないのか
374 名前:デフォルトの名無しさん [2007/02/26(月) 20:15:30 ] Cellの中に文字列があって、その文字列の長さを取得するにはどうすればいいか教えてください。 文字変数の長さの取得方法がわかりません。
375 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 20:27:35 ] >>374 Len 文字変数の長さって何?
376 名前:デフォルトの名無しさん [2007/02/26(月) 20:40:36 ] >>375 説明がまずかったですね たとえば、 a As String b As Integer a = "ABC" または a = Range("A1").Valueとして、このA1セルに"ABC"が入っているとします。 それで、 b をこの a の中に入っている文字列の長さの値を入れたいわけです。この場合は3になるわけですが どうすれば b = 3 とすることが出来るかがわかりません。
377 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 20:46:05 ] >>376 答え書いてあるやん
378 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 20:55:51 ] b = Len( a ) まあいろいろ期待どおりに動作しない場合も多いがね。 b = LenB(a ) 内部がEUCなのでバイトカウントでも(ry
379 名前:デフォルトの名無しさん [2007/02/26(月) 20:55:59 ] >>377 すいません。見落としていました。 >>375 ありがとう はぁ、なんか疲れてるみたい・・・
380 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 21:02:18 ] 「文字列の長さ」を「文字変数の長さ」と言い換えたのは 意味があるのかと…思ったわけです。 深く考えすぎたか_| ̄|○
381 名前:デフォルトの名無しさん [2007/02/28(水) 15:39:38 ] マルチすみません。 情報が少ないですが以下の現象で困っております。 環境 WindowsXP Excel2003 エクセルのVisual Basic Editorで社内作成のコントロール(VB6にて) をはりつけ、その後エクセルを終了すると必ずメモリがReadに・・・ のエラーがでてしまい困っています。あと2時間ほどで調べないといけない のですが。。。誰かご教授お願いします。
382 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 15:49:07 ] > 社内作成のコントロール の問題を聞かれても、どうにもならんわな。 聞きたいなら最低限そのコントロールのソースを晒せ。 それが出来ないなら自社内で解決しろ。
383 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 16:00:10 ] 社内掲示板で2ちゃんねる使ってるなんてユニークな会社ですねー
384 名前:デフォルトの名無しさん [2007/02/28(水) 17:21:49 ] dim page as long URL="http:xxx.com/&page="+cells(x,x)+"&main= だとエラーは出ないんですが URL="http:xxx.com/&page="+1+"&main= や URL="http:xxx.com/&page="+page+"&main= だと型が一致しません13Errorとでるのですが、なぜでしょうか
385 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 17:27:54 ] URL="http:xxx.com/&page=" & 1 & "&main=" URL="http:xxx.com/&page=" & page & "&main="
386 名前:デフォルトの名無しさん [2007/03/02(金) 02:08:55 ] objIE.document.forms.Item(0).ID.Value = "ID" objIE.document.forms.Item(0).PASS.Value = "PASS" objIE.document.forms.Item(0).submit().Click これで自動ログインさせたいのですが、ログインするこそはするんですが、 objIE.document.forms.Item(0).submit().Click の行をデバックで過ぎると オブジェクトが必要です。(Error 424) と言うエラーが出てしまうのですが、なにか解決方法はありませんか
387 名前:デフォルトの名無しさん [2007/03/02(金) 02:12:50 ] すみません、書き込んでから気づきました。().Clickが不要だったんですね('A`) スレ汚しすみませんでした
388 名前:デフォルトの名無しさん [2007/03/02(金) 06:55:43 ] 毎日入力するデータを別シートに自動保存して 何日か溜まったら分析したいのですが 例) 3月2日に "Sheet1" の A10 〜 A20 に整数のデータを入力する コマンドボタンをクリックすると そのデータが "Sheet3" の 3月2日の列 ( AH10 〜 AH20 ) にコピーされる 翌日、3月3日に "Sheet1" の A10 〜 A20 に整数のデータを入力する コマンドボタンをクリックすると そのデータが "Sheet3" の 3月3日の列 ( AI10 〜 AI20 ) にコピーされる また翌日・・・ という感じに、Sheet1の同じ範囲のデータをSheet3に、日にちごとにずらしてコピーしたいのですが どうすれば良いのでしょうか?教えて下さい