Excel VBA質問スレ Part6 at TECH
[2ch|▼Menu]
[前50を表示]
800:番組の途中ですが名無しです
08/05/15 14:03:07
Excel2003のVBAでcontinue forが使えないのは仕様ですか?

801:デフォルトの名無しさん
08/05/15 16:56:49
>>799
スクロールの問題……じゃないよな

802:デフォルトの名無しさん
08/05/16 15:32:49
Excel2000

シート上に
ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1")
で生成したチェックボックスのみを削除するプログラムを
実行すると

アプリケーション定義またはオブジェクトの定義エラーです

というメッセージが出ます。 s.FormControlType のところで
エラーが出ているのですが、どうやったら動くようになるのでしょうか?

Dim s As Shape

For Each s In Sheets("sheet1").Shapes
If s.Type = msoOLEControlObject Then
If s.FormControlType = xlCheckBox Then
s.Delete
End If
End If
Next


803:799
08/05/16 17:00:43
>>801
レスありがとうございます。
スクロールの問題ではありません。
(1)の現象になったので、
マクロと同じ操作をして、マクロ記録してみたら
(2)になりました。

804:デフォルトの名無しさん
08/05/16 18:30:33
>799
WorkSheet.Shapes.AddPicture(...) かな?

試してないけど
ActiveSheet.Pictures.Insert( "D:\abc\pic1.JPG").Top = Range("A5").Top
ActiveSheet.Pictures.Insert( "D:\abc\pic2.jpg").Top = Range("A21").Top


805:799
08/05/16 20:29:24
>>804
レスありがとうございます。
うまくいきました。

806:デフォルトの名無しさん
08/05/16 20:37:24
30125なら上位3桁だけとって、゙30100゙から100刻みで表示させたい。
0.002354なら゙0.00235゙から0.00001刻みでグラフの軸に表示したいのです。
何かよい方法はありませんでしょうか?

807:799
08/05/16 20:47:07
>>804
別質問ですけど、
804で挿入したオブジェクトのnameは、
どのようにすれば取得できるのでしょうか。


808:デフォルトの名無しさん
08/05/16 23:37:41
仕事でマクロを使って制御のシミュレーションをしたいのですが
1つのプロシージャ内でループ演算をしつつ、他のプロシージャを実行して
変数を変更したいと考えています。
複数のプロシージャを並列処理できる方法はないのでしょうか?

809:デフォルトの名無しさん
08/05/17 00:12:29
ActiveX EXEを作れば可能。
Win32APIのスレッドも使えるかもねー

810:デフォルトの名無しさん
08/05/17 01:15:28
既出だったらすみません。

excel2000+winXpで開発してるんですが、
処理を走らせるとメモリの使用率がたまる一方で
解放されている気配を感じません。

しまいにはメモリが足りませんとエラーになり
落ちてしまいます。

助けて!!1

DAO3.6使ってるんですが関係しますかね?
メモリを解放する方法ってありますか??

811:デフォルトの名無しさん
08/05/17 06:59:32
>>810

DoEvent とか
動的配列を使ってるなら必ずeraseするとか

812:デフォルトの名無しさん
08/05/17 08:39:43
>806
刻み幅等を計算する方法を知りたいというのが主旨かな?

30125の常用対数は、log(30125)/log(10) =4.47892705558292
切り上げて、5
上位3ケタだけ取るので、刻み幅は、10^(5-3)=100

切り上げは、round(x-0.5)+1 という感じかな。

813:デフォルトの名無しさん
08/05/17 10:29:50
>807
古い環境が無いんで試せてないけど
Dim Pic1 As Picture
Dim Pic2 As Picutre

Set Pic1 = ActiveSheet.Pictures.Insert( "D:\abc\pic1.JPG")
Pic1.Top = Range("A5").Top 
Range("A4").Value = Pic1.Name
Set Pic2 = ActiveSheet.Pictures.Insert( "D:\abc\pic2.jpg")
Pic2.Top = Range("A21").Top 
Range("A20").Value = Pic2.Name


814:デフォルトの名無しさん
08/05/17 14:03:34
>>808
複数のExcelインスタンスを起こして、マルチプロセスでやれば?
これならWin32APIなんか使わずにできるが


815:デフォルトの名無しさん
08/05/17 19:17:01
timer使え

816:デフォルトの名無しさん
08/05/18 14:10:29
ループの中でたのプロシージャを呼び出せばいい
灰次

817:デフォルトの名無しさん
08/05/18 23:31:42
マクロでNORMDISTを使いたいんですが、エラーが出てしまいます。

マクロではどのように記述すればNORMDISTは使えるのでしょうか?

誰か教えてください

818:デフォルトの名無しさん
08/05/19 11:05:13
Excel2000上で動的に配置したチェックボックスにイベント処理を追加したいのですが
方法がわかりません。ヒントだけでもいいのでお願いします。

819:デフォルトの名無しさん
08/05/19 16:39:14
>>818
classモジュール使えばできるよ

820:デフォルトの名無しさん
08/05/19 16:46:45
>>817
ヘルプの例で言えば、

42  対象となる値
40  分布の算術平均(相加平均)
1.5 分布の標準偏差

WorksheetFunction.NormDist(42, 40, 1.5, True)

で、いいんじゃない?

821:デフォルトの名無しさん
08/05/19 20:24:01
実行時エラー'1004'が出ます。
コマンドボタンで、
Workbook Open "C:\-.xls"
Worksheets("a").Select
Range("A20").Select

と入力し別ファイルのシートのセルを選択したいのですが、
どのように直せばいいか、教えていただきたいです。
よろしくお願いします。

822:デフォルトの名無しさん
08/05/19 21:26:10
>>821
ちゃんと目的のbookが開いているなら、シート名「a」のシートがあれば問題ないよ

823:デフォルトの名無しさん
08/05/19 21:55:45
>>821-822
シート上に置いたコントロールツールボックスのコマンドボタンならそんなんでまともに動くわけねーよ。
シートや範囲をちゃんとブックから明示しないと。

824:822
08/05/19 22:04:21
>>823
なるほど、 シート上に置いたコントロールツールボックスのコマンドボタン
おまい天才!
スレ汚しスマソ

825:デフォルトの名無しさん
08/05/20 20:21:39
>>823のなかなかのエスパーぶりに嫉妬

826:デフォルトの名無しさん
08/05/20 21:28:05
別に>>823は普通だろ?
Formのコマンドボタンなら>>821でも動くだろうが、どこに書いても同じように動くコードを書かんとね。


827:デフォルトの名無しさん
08/05/20 23:30:47
>>826
どこに書いても同じように動くコードを書く必要はない
コードを書いたクラスでまともに動けば問題ない

828:デフォルトの名無しさん
08/05/21 00:21:17
質問させて頂きます。

デジタル署名付のVBAプロジェクトで、
ブックオープン時にオラクル接続をし、
オートシェイプで線を引くという処理をしております。
処理後、シートを見るとオートシェイプで描いた線の色がありませんでした。
プリンタで出力すると、線が描かれております。
原因と対処法を教えてください

【OS】windows XP pro
【EXCEL】2003

【処理内容】

Dim OraSession As Object
Dim OraDatabase As Object

Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase("TNS", "USER/PASS", ORADB_DEFAULT)

Set OraSession = Nothing
Set OraDatabase = Nothing

ActiveSheet.Shapes.AddLine(98.25, 151.5, 150#, 159.75).Select

といったかんじです

829:デフォルトの名無しさん
08/05/21 01:40:10
>>828
オラクル関係なくね?
接続して閉じてるだけだろ?
それとも、オラクルに繋がなければ問題は解消されるの?

830:826
08/05/21 07:43:54
>>827
そりゃ確かにそうだね。
冗長な記述を避けるためにもMeとか書かんからね。
>>821のコードに関してはということ。

831:826
08/05/21 07:46:16
Me.を書かんことはちょっと違うか。
まどうでもよい。

832:デフォルトの名無しさん
08/05/21 07:59:09
書式設定指定したら?

833:デフォルトの名無しさん
08/05/21 17:42:10
XP、EXCEL2003です。

特定のディレクトリの直下にあるファイル(複数)のファイル名を
全て取得する方法を教えて下さい。
よろしくお願いします。


834:デフォルトの名無しさん
08/05/21 17:49:26
>>833
ちょこちょこ質問掲示板見てると週に1回は遭遇する質問
ググれば腐るほどコードがある
個人的にはfilesystemobjectを使うのが一番効率いいと思う

835:833
08/05/21 19:20:12
>>834
レスありがとうございます。
失礼いたしました。


836:デフォルトの名無しさん
08/05/21 21:22:28
fsoはネットワークドライブ相手だったりするとテキメンに
速度が落ちたりするから困る。
 あと、ワイルドカードが無いのはどーゆーことだ。

837:デフォルトの名無しさん
08/05/21 23:21:02
>>836
独り言はチラシの裏に書け

838:デフォルトの名無しさん
08/05/22 06:44:14
確かfsoは、クエリとってからのファイル追加や削除、内容変更に
伴う更新もかなりの直近まで自動的に更新してくれる中々の
優れモンだったという記憶が....
Kernel32.DLL のAPIを使って自分でクエリした場合は、
ファイル数が多く、激しく更新されるような場合は、取得情報と
実態の間に食い違いが発生してユーザーはパニくるのがオチなんだが
(これもチラ裏に書くべきだったか)

839:デフォルトの名無しさん
08/05/22 18:21:06
わざわざfsoやapi使わんでもDir()関数使えばよい

840:デフォルトの名無しさん
08/05/22 21:25:32
Dirだとパスの長さが255以上になると確かエラーになる。

841:デフォルトの名無しさん
08/05/23 13:23:12
sage

842:デフォルトの名無しさん
08/05/23 23:07:41
OS:win xp
excel:2007

初めて質問します。お願いします。

 ・データ用のシート
 ・処理用シート

の二つを用意します。

データ用シート
    店舗→ A   B   C
 商品↓
 りんご   100  200  300
 みかん   10  20   30
 めろん    1   2    3

処理用シートのA1,B1のセルに店舗と商品を書き込むと、データ用のシートを参照して、
そのシートに書かれた数値(例えば、上記の表の「A店(=A1)」の「みかん=B1」だと「100」)が、
処理用シートのC1(「=100」が)に入るようにしたいです。
店舗、商品は任意で追加していきたいので、データ用シートの列、行を検索していくようなやり方がいいのでは、
と考えています。

調べて、VLOOKUP関数を使えば…、というところまで来たのですが、二点のセルの値を見て、
表から一つの値を出力する、というところがわかりません。
何卒、ご指導の方、お願いします。

843:デフォルトの名無しさん
08/05/24 00:01:34
>>842
VBAに関係ないと思うのだが。
vlookup以外にもlookupやmatchもあるんだから何とかなるだろそれくらい。

844:デフォルトの名無しさん
08/05/24 00:16:49
なんとかするのがお前たちの仕事だろ。

あのな、上から目線もいいけどここはVBAに詳しくない奴らが
何をどうやったらいいかを聞きにきてるスレなわけ。
その手ほどきをしてやった上でそういうこと言うならいいけど、
回答も示さずにそういうこと言うのは荒らしとかわんねーんだよ。
こたえる気が無いなら質問スレから消えろよカスが。


↓じゃ、模範的回答を頼む

845:釣られてみる
08/05/24 00:26:30
いや、それだけの情報でVBAでどうしろと。

846:デフォルトの名無しさん
08/05/24 03:07:26
スレタイ読め。ここは質問スレであって回答スレではない。

847:デフォルトの名無しさん
08/05/24 03:09:22
>>846
こいつ頭悪そうだな(ゲラゲラ

848:デフォルトの名無しさん
08/05/24 07:33:50
>>842
いろんなやり方があると思うけど、私がスマートだと思うのを提案します。

データ用シートをこんなふうにする。
ID 店舗 商品 値段
Aりんご A りんご 100
Aみかん A みかん 10
Aめろん A めろん 1
Bりんご B りんご 200
Bみかん B みかん 20
Bめろん B めろん 2
Cりんご C りんご 300
Cみかん C みかん 30
Cめろん C めろん 3

IDの列は数式で作る。Aりんごのところに
=B2&C2
としてオートフィルで。


849:デフォルトの名無しさん
08/05/24 07:53:02
つづき

処理用シートで
C1には
=A1&B1

D1には
データ用シートはSheet1にあるなら
=VLOOKUP(C1,Sheet1!A:D,4,FALSE)
としてできあがり。


850:デフォルトの名無しさん
08/05/24 08:12:05
>>842
C1に
=index(「データの範囲」,match(B1,「商品名の範囲」),match(A1,「店舗名の範囲」))
と入れる

これVBAじゃないから、次からはEXCEL総合相談スレの方へ行ってくれ

851:デフォルトの名無しさん
08/05/24 10:55:08
VBA初心者ですが質問させて下さい。
Module1で宣言したパブリック変数をThisWorkbookで参照する事はできないのでしょうか。

状況を説明しますと、nullpo.xlsというマスターファイルがあります。
その中のModule1で処理を実行すると、public変数をインクリメントします。

"名前を付けて保存時"の保存ダイアログで、あらかじめ表示されるファイル名に
そのpublic変数を出したいのですがうまくいきませんでした…

852:851
08/05/24 13:22:46
クスン…終わらないと帰れないんです
みなさんの力を貸して下さい。

言い忘れましたがわたしは女です。

853:デフォルトの名無しさん
08/05/24 13:26:25
>852
俺が何でも答えますよ
もうちょっとしたら家に着くから待っててね

ところで今日は帰ったらどうするの?
汗かいちゃったってシャワーでも浴びるのかな?かな?

854:851
08/05/24 13:34:41
>>853
ありがとうございます。
彼氏と待ち合わせしてるんです。

855:デフォルトの名無しさん
08/05/24 13:39:32
VBAを自由自在に扱うために、VBの勉強をしようかと思うのですが
VBの種類が多すぎてどれを勉強したらいいのかわかりませんでした。
VBAのためにVBを勉強するには、どのVBを勉強すればいいのでしょうか?

856:853
08/05/24 13:41:43
死ね。お前に教えることは何もない
自分でどうにかするんだな

857:853
08/05/24 13:42:33
856は>854宛てな

858:851
08/05/24 13:59:41
そんな…

他スレで質問することにします。
すみませんでした。

859:側近中の側近 ◆0351148456
08/05/24 15:22:18
>>853
(っ´▽`)っ
独身の女の子には優しいのね。最低☆

860:側近中の側近 ◆0351148456
08/05/24 15:23:00
>>855
(っ´▽`)っ
VBAならVB6.0だね。

861:デフォルトの名無しさん
08/05/24 15:25:38
>>856
手のひら返しワロス

862:デフォルトの名無しさん
08/05/24 15:29:18
>>851
そのpublic変数値を返す、public関数でも作れば?

つか、ダイアログに値をいれて有効にする処理が出来てないだけの気がするが…

863:855
08/05/24 15:29:35
>>860
ありがとうございます。

864:デフォルトの名無しさん
08/05/24 15:39:20
>>860

VB6.0やVB.NETをVBAを使えない人に勧めちゃらめどちらも超ベテラン向けだよ
VBScript位しか残らないけど、VBAとはちょっと合わないかも知れないね。
やっぱしVBAはVBAで覚えるしかないのかな(鬱

865:デフォルトの名無しさん
08/05/24 16:18:52
VBAを覚えたいのにVBAを利用しない意味がわからない

866:デフォルトの名無しさん
08/05/24 21:16:49
>>842
商品と店舗の組み合わせが疎であるなら>>848の方法
組み合わせが密であるなら>>850の方法がいいだろうね。

ところで解決したのかどうか反応がほしいもんだね。
コミュニケーションしようや。

867:デフォルトの名無しさん
08/05/24 21:25:26
>>865
これほんとにその通り。
なんでVBAを覚えるためにVBを覚えたいなんて言うのかな。
VBを覚えたいんだって素直に言えばいいのに。

868:デフォルトの名無しさん
08/05/24 21:29:23
VBってMSDNライブラリ使えるの?

869:デフォルトの名無しさん
08/05/24 21:38:17
VBAを体系的に勉強するのにいい本とかありますか?

870:デフォルトの名無しさん
08/05/24 21:46:29
実戦力UP! Excel VBAドリル式問題集

871:デフォルトの名無しさん
08/05/24 21:47:13
VBAとはマクロの記録で泥縄式に覚えていくもんだ

872:デフォルトの名無しさん
08/05/24 22:46:45
エクセル2003で上の行から数字が入ったセルだけをm個
選んで加えるVBAをうちたいんですが、上手くいきません。

for a = 1 to 100
m = cells(3 , 3)
b = cells(1 + k + a , 1 )
k = 1
s=1
do while s =< m
if b <>"#na n/a" then
b = b + cells(1 + k + a + s , 1)
k = k + 1
s = s + 1
else
k = k + 1
loop
next

いまこんな感じで打ってるのですが、 if b <>"#na n/a" then
のところで止まってしまいます。
どこがおかしいのでしょうか?
また、もっといい方法はありますか?

873:デフォルトの名無しさん
08/05/24 23:21:29
>>872
「数字が入ってるセル」なら条件をb≧0にすれば?

874:デフォルトの名無しさん
08/05/24 23:33:33
負の数は数字ではないと?

875:デフォルトの名無しさん
08/05/24 23:38:47
kとsを+1しているがループするたびに初期値が1に戻るぞw
あと、b = cells(1 + k + a , 1 )の部分、1回目の処理でkの値が判らない。

876:デフォルトの名無しさん
08/05/24 23:39:42
application.run "abc"
msgbox "zzz"

abcマクロの完了の後に、ダイヤログボックスにzzzを表示したいのに、
即行でzzzが表示されてしまう。
同期をするようにするには引数か何かを入れるのでしょうか?


877:デフォルトの名無しさん
08/05/24 23:40:54
>>873
なるほど。そういう方法がありましたか。
ありがとうございます。

>>874
負の数は存在しないデータなので、大丈夫だと思います。


エラーがでた原因がわかる方はいらっしゃりましたら、お答えいただきたいです。

878:875
08/05/24 23:42:23
ごめん入れ子になってたんだな。最初のforしか見てなかった。

879:デフォルトの名無しさん
08/05/24 23:43:21
end ifが無いな

880:872
08/05/24 23:43:44
>>875
すいません初心者なもので、いまいち意味不明です。
勉強して理解したいとおもうのですが、参考までにどういった
勉強をすればいいか教えてください。
オススメの本、サイト等等・・・

881:デフォルトの名無しさん
08/05/24 23:46:56
>>877
<>"#na n/a"
エラー値でなければ って条件と思っているのであれば間違い。
エラー値かどうかを調べたいのならiserrorを使う

882:872
08/05/24 23:47:24
for a = 1 to 100
  m = cells(3 , 3)
 b = cells(1 + k + a , 1 )
  k = 1
 s=1
   do while s =< m
    if b > 0 then
     b = b + cells(1 + k + a + s , 1)
     k = k + 1
      s = s + 1
    else
     k = k + 1
    end if
    loop
next

これで大丈夫でしょうか?

883:デフォルトの名無しさん
08/05/24 23:48:51
>>881
そういうことでしたか。
iserrorという存在を知りませんでした。
勉強不足でした。
ありがとうございます。

884:デフォルトの名無しさん
08/05/24 23:53:46
> if b <>"#na n/a" then
これエラーなんか出ないよ
意図したとおりには動かないかもしれないけど

885:デフォルトの名無しさん
08/05/24 23:57:29
根本的な間違いがあった

for a = 1 to 100
  m = cells(3 , 3)
 b = cells(1 + k + a , 1 )
  k = 1
 s=1
   do while s =< m
    if cells(1+k+a+s-1 > 0 then
     b = b + cells(1 + k + a + s , 1)
     k = k + 1
      s = s + 1
    else
     k = k + 1
    end if
    loop
next

すいませんでした。

886:デフォルトの名無しさん
08/05/25 00:18:54
まあなんだ
ちょっと落ち着け

887:デフォルトの名無しさん
08/05/25 12:04:28
シートコピーで悩み事があるので打開策を見つけられたらと思い書きこまさせていただきました。
どなたかお助けいただけたらうれしいです。
VBAにてシートコピーに要する時間が長くて(10分以上)悩んでおります。

Bookの構成といたしまして標準モジュールに数式文字列を評価するものを
かいてあります。

Function Eval(ByVal expr As String)
Eval = Evaluate(expr)
End Function

・Sheet1には、様々な経理データを入れるようにしてあります。
そこに入れた値などを元にセル名を作るように書いてあります。

例)A1に”1”という値でB1に”2”という値が入っていればA2のセル名を”12”
とします。

・Sheet2には予めセルに=eval(12)の様な数式をいれ評価をしております。
これが1枚のシートに2000くらい数式が入っています。

Sheet1、2ともに特定条件のとき複製を何枚か作ります。
このときすごく時間がかかります。
原因は数式が大量にあるものをコピーすること及びセルに名前をふっているのが原因なのは分かりますが
コピー以外の動作が非常に快調なので変えたくないということとたぶんeval以外での解決策を模索するのはかなり時間を要しそうなのでコピーを何とかする方を選びたいです。
もちろん再計算の停止などはしてあります。
事前に特定条件を作りだしシートを非表示にしておき特定条件のときに表示させるのも
一つの手ではありますが何百枚もシートを隠しておくとファイルサイズがばかでかくなるという
難点もあって躊躇しています。
例えば=eval(@@@@@@)を多く入れたのが原因であれば標準モジュールを何らかの形でいったん無効にすれば早くなるのかとかスクリプトなどを使って別のブックからシートを移動させるなど・・・・他の代替案はありえないでしょうか?
何分わかりづらい質問で申し訳ありませんが、ご回答いただければ幸いです。
よろしくお願いします。

888:デフォルトの名無しさん
08/05/25 12:11:58
まず計測しろよ。んで、遅い原因を特定してから、もっとわかりやすい文章で再質問な。

889:デフォルトの名無しさん
08/05/25 12:58:21
自動計算やめてシートコピー

890:876
08/05/25 13:03:06
>>887
質問する方のレベルのものが下手なレスをつけるのもどうかと思うが、
設問説明に既に回答があるような・・・
経理処理なのでシート数が大量となるのはある程度やむを得ないでしょうが、
それにしても、10分というのはかかりすぎというか、長いですね。
1 object.enablecalculation=falseを設定されていると言うことですが、
必要なシート全てにされているかどうか
2 通常、速度を速める常套手段の
application.screenupdating=false
application.visible=false
application.enableevents=false
で、どうなるか試してみたらいかがでしょう

私の質問は解決しました。
直列処理のはずが、並行処理になったのかとの疑問からでしたので。

891:デフォルトの名無しさん
08/05/25 16:55:25
>>887
どこかで見たような質問だな
何でそんなおかしなことするの?


892:デフォルトの名無しさん
08/05/25 16:59:47
>>887に回答する人は次を見てからにしてね
URLリンク(www.moug.net)

893:釣られてみる
08/05/25 17:02:02
>>887
別にここはブック提示禁止じゃないから晒してみたら?

894:デフォルトの名無しさん
08/05/25 17:05:09
' ただの荒らしのコピペじゃないかと疑い始めた

895:デフォルトの名無しさん
08/05/25 17:27:39
なんだ、二週間前の話じゃねーか。
第三者によるコピペの疑い濃厚だな。
しかし、誰もプロファイリングしろというアドバイスしないって、mougってどんだけ素人集団なんだよ

896:デフォルトの名無しさん
08/05/25 17:30:54
あー、ひょっとして、シートを一枚sheet.copyで10分かかるってことか?
だったら、プロファイリングも糞も無いな

897:デフォルトの名無しさん
08/05/25 18:13:57
プロファイリングっていうの初めて聞いたorz

898:デフォルトの名無しさん
08/05/25 22:50:47
マルチなら放置
荒らしのコピペなら放置

どっちにしても放置だな

899:デフォルトの名無しさん
08/05/25 23:12:29
セルに記載されている文字列を変数名として認識させる方法はありますでしょうか?もしくは無理ですか?

(1,1) に hoge って文字列が入っていて、VBAの記述内に、
cells(1,1).value = 100  '←これは当然上書きされますが・・・。
のように、変数名として取得して代入が出来たら良いな。と考えております。

なにとぞよろしくお願いします。

900:デフォルトの名無しさん
08/05/25 23:16:16
aaa(1,2,3)
bbb(1,2,3)
2個の同一の配列があるのですが、この二つが同一であるかの判定について質問させてください。

今は配列長を取得して、forで繰り返してaaa(i) = bbb(i) と1要素ずつ判定しているのですが、
もっとシンプルに、行数を少なく判定する方法はありますでしょうか。アドバイスお願いしま!!!


901:デフォルトの名無しさん
08/05/25 23:21:29
>>899
hogeをどこにも使ってないじゃないか。

>>900
原理的に全要素を比較するしか判定のしようがないから、今の方法でいいんじゃない?


902:VBAの初心者
08/05/26 01:57:42
VBAで配列によって書き込む練習をしているのですが想像力が無くどうやってうまくやればいいのか悩んでます。
どなたかヒントをいただけないでしょうか。

この表のような規則と二つの数式を入れたいのですがどうやったらいいでしょうか?
よろしくおねがいします。



URLリンク(briefcase.yahoo.co.jp)

903:デフォルトの名無しさん
08/05/26 02:31:24
>>899>>887のような気がするのは俺だけ?
馬鹿さ加減が似てるんだが。

904:デフォルトの名無しさん
08/05/26 02:38:50
言葉遣いは似てるね、無駄に敬語とか

905:デフォルトの名無しさん
08/05/26 06:21:48
>>899
Common Language Runtime Library を参照設定して
Dim ht As Hashtable
Set ht = New Hashtable

詳しい使い方は
URLリンク(homepage1.nifty.com)

別にScripting.Dictionaryでもいいんだけどね。

文字列と添え字のどちらでも変数にアクセスしたいなら
SortedListを使えば可能。


906:デフォルトの名無しさん
08/05/26 06:37:27
>>900
joinして比較

907:デフォルトの名無しさん
08/05/26 07:19:32
それやるならデリミタを変数中に絶対出てこない文字にしておけよ

908:デフォルトの名無しさん
08/05/26 10:41:35
一応ExcelVBAの質問です

プログラム実行中に、ユーザーフォーム上のimageの表示・非表示や、
ラベルのキャプションの変更することは出来ないのでしょうか?

実行中に内容が変更できるオブジェクトはprogressbarのみですか?

909:デフォルトの名無しさん
08/05/26 18:21:24
連投、誠にスマンです

VBAで、作業用シートを作成して、ソートとか
色々やった後、用が済んだらシートを削除するようなプログラムを作って
いるのですが、

sheets(hoge).delete

の後、必ず「データあるけど削除してOK?」っていうダイアログが出てしまいます。
このダイアログに自動的にYesで答えて、プログラムを中断しないように
出来ないでしょうか。

910:デフォルトの名無しさん
08/05/26 19:21:36
なんちゃらAlear = false

911:デフォルトの名無しさん
08/05/26 19:30:16
tが抜けてたorz
DisplayAlertsでヘルプ嫁

912:デフォルトの名無しさん
08/05/26 20:19:11
>>908
UserForm1.Label1.Caption = "testtest"
表示・非表示なら多分 〜.visible = true とか false とかで逝けるんじゃね?

913:デフォルトの名無しさん
08/05/26 21:08:10
>>910
ありがとうございます!
できました。

>>912
プログラムが走っている最中は、フォームの画面更新が
行われないようで、それらが効かんです(T-T

914:デフォルトの名無しさん
08/05/26 21:36:25
Screenupdating=falseが入っていたら画面の更新はされないが、そういうオチか。

915:デフォルトの名無しさん
08/05/26 22:32:05
>>913
ループにDoEvents

916:デフォルトの名無しさん
08/05/26 22:38:57
ちなみに、DisplayAlertsもScreenupdatingもマクロの最後でちゃんとTrueに戻すのが基本だからな

917:デフォルトの名無しさん
08/05/26 23:43:01
質問失礼します。

新しいシートを作成→そのシートにスクリプトやイベントを埋め込む

を自動でやるにはどうしたらよいですか?
もちろん埋め込みたいスクリプト等は事前に作成しておくものとします。
どうすれば、それを新しいシートに埋め込む操作ができますか?

お手数をおかけします。よろしくお願いいたします。


918:デフォルトの名無しさん
08/05/27 00:04:19
1. そのシートにスクリプトやイベントを埋め込まなくてもいいような設計にする
 Workbookオブジェクトにどんなイベントがあるか調べてそれをググれ
2. 今は亡き、石井勝氏のありがたいページを熟読する(合掌)
 URLリンク(www.morijp.com)
3. ここまでで大抵の問題は解決するはずだが、それでも足りない場合は、動的にコードを追加しろ
 vbcomponetでググれ

919:デフォルトの名無しさん
08/05/27 00:08:53
ちなみに3を推奨しないのは、それを実行するPCグローバルなExcelの設定を変更する必要があるから。
マクロの信頼性とは別に、「Visual Basicプロジェクトへのアクセスを信頼する」という設定をしなければならない。

920:デフォルトの名無しさん
08/05/27 00:37:37
>>917
・Class1を作って、Public WithEvents sh As WorkSheetを追加
・ThisWorkBookのモジュールに、Dim o As Class1を追加
・ThisWorkBookのWorkbook_SheetActivateで、
 ・Set o = New Class1
 ・Set o.sh = sh
・Class1のsh_SelectionChangeで、
 ・MsgBox Target.Parent.Name & "!" & Target.Address

似たような感じで、各シートのモジュールにコードを追加することなく、イベントハンドらを
実装できる。あとは、Class1のo.shやら、ActiveSheetやらで、各シートのモジュール外に
コードを実装しろ。シートごとに違う処理をする場合は、sh.Nameとかで振り分けろ。

921:デフォルトの名無しさん
08/05/27 00:59:11
>>917
新規に埋め込まなくても、雛形シートをコピーした新しいブックを作って解決

922:デフォルトの名無しさん
08/05/27 01:23:29
チンコが大きくなるマクロを作ったはいいんですが、どうやって呼び出したらいいんですか?

923:デフォルトの名無しさん
08/05/27 01:26:59
>>922
ああ、それさっきコンパイルしたら「オブジェクトが小さすぎます」ってコンパイルエラー出たよ

924:デフォルトの名無しさん
08/05/27 08:15:42
連続質問になってすんません…セル名が変わらんくて困っとります。原因がさっぱりどす…If Worksheet("Sheet1").Range("A1").value = 1 Then
For i =1 to 20
Worksheet("Sheet1").cells(1,i).name = "mid"&cells("B",i).value
Next i
End if
Next

925:デフォルトの名無しさん
08/05/27 09:05:37
何をやってるのかさっぱりどす
Worksheet("Sheet1").cells(1,i).Name.Name


926:913
08/05/27 09:18:33
>>914-916
ありがとうございます。
Do Events を試して見ます!

927:デフォルトの名無しさん
08/05/27 10:09:15
A1の"セル名"を変えるには、range("A1").value = "ほげ"
どすえ。

928:デフォルトの名無しさん
08/05/27 11:04:14
Excel一般の質問ではないのですが、ExcelVBAのリストボックスの
中身の上下スクロールをマウスのホイールに連動させることは
出来ないのでしょうか?

ググってみたのですが、分かりませんでした。

929:917
08/05/27 15:59:44
>>918-921
ありがとうございます!勉強になりました。
とりあえず一番簡単な921さんの方法を試してみますね。

930:デフォルトの名無しさん
08/05/27 16:02:04
ネタでも「変わらんくて」と言う奴が死ぬほど嫌いだから絶対教えない。

ら抜き言葉でもブチ切れそうなのにさぁ、どうしてわざわざ”な”を”ん”に
置き換えるんだよ最近のゆとりどもは。書いてて違和感ねーのか糞が。

931:デフォルトの名無しさん
08/05/27 16:06:07
>>930
基地外乙w
単にローマ字入力でAが抜けたTypoだろ

932:930
08/05/27 17:00:52
>>931
いや、「分からんくて」「変わらんくて」「倒せんくて」
とか書き込む奴はかなり多いぞ。
そういう言い回しが流行ってんのか?ってほど。
年齢層の低いスレ覗いていないと分からんくても
仕方ないけど…


>>932
>分からんくても
死ね


933:913
08/05/27 17:11:05
ユーザーフォームの更新の件、DoEventsでいけました
ありがとうございました

>>932
それは関西弁っていう日本ではメジャーな言語

934:デフォルトの名無しさん
08/05/27 18:43:46
35才の関西人だが「…くて」は割と使う。
>>930はもう少し視野を広げてみてはどう?

935:デフォルトの名無しさん
08/05/27 19:56:10
テンプレみたらNG質問のようだが、適当なスレが見付からないので教えてください。

ExcelBVAのテクニックは大体わかります。
しかし、「Excelを起動するとVB?が起動し、ユーザーフォームとExcelが分離している状態」
のプログラム技術を身につけたいと思っています。

これを会得するには、やっぱりVBの知識と多大なる努力が必要なんでしょうか?


936:デフォルトの名無しさん
08/05/27 20:19:11
24歳の関西人の俺はつかわない
だがそんなことにマジ切れすとか、情緒不安定なんじゃね?

937:デフォルトの名無しさん
08/05/27 20:49:46
>>935
VBAでできる。
どれくらいの努力が必要かは、君のセンスと知力に依存するので誰も答えられない。

938:デフォルトの名無しさん
08/05/27 20:54:29
>>935
できない私が言うのもなんだが、そんなことできて何がいいの?

939:デフォルトの名無しさん
08/05/27 20:55:50
ユーザーフォームって、マウスホイールに対応してないとか
使いづらいんじゃないすか。

>>936
「マジ切れす」?また怒られるぞ!

940:デフォルトの名無しさん
08/05/27 22:31:35
>>937
うおお、マジですか、VBAでできるの?
怒られそうだがさらに質問。

どうやんの?メニューバーとかどーみてもVBっぽかったけど。

941:デフォルトの名無しさん
08/05/27 22:34:41
>ExcelBVAのテクニックは大体わかります。
>ExcelBVAのテクニックは
>ExcelBVA


ExcelVBAを知らないんだからしょうがないよな

942:デフォルトの名無しさん
08/05/27 22:39:26
エクセルを隠すだけなら

' Excel本体は隠す

Private Sub UserForm_Initialize()

Application.Visible = False

End Sub

やりたいのはこういう事?

943:デフォルトの名無しさん
08/05/27 22:51:25
そうじゃなくて、エクセルを使わずに、フォームだけで何かを
構築したいという事でしょ。

944:デフォルトの名無しさん
08/05/27 22:53:16
>>930
関西人を馬鹿にしとるんかわれぃ!

945:デフォルトの名無しさん
08/05/27 23:06:59
関西人なら「変わらんで」「変わらんかって」だと思うが

946:デフォルトの名無しさん
08/05/27 23:07:23
河内のぉ〜○っさんの歌ぁ〜

947:デフォルトの名無しさん
08/05/28 15:57:23
はじめまして。

リストボックスで選択した項目を任意のアクティブセルに反映させる時、
反映させたくないセルに反映させないようにするにはどうしたら良いでしょうか?

例えば、セル"A1"には反映させたくないけど、"A1"をアクティブにしたまま
リストボックスにて項目を選択して反映させてしまうのを防ぎたいのですが。

948:デフォルトの名無しさん
08/05/28 16:26:21
>>947
オフセットかなんか使って条件分岐するしかないのでは?
B1に何か入力がある時は、A1には入れないみたいな感じで。

Sub nnn()
If Trim(ActiveCell.Offset(0, 1).Value) = "" Then
ActiveCell.Value = Userform1.ListBox1.value
Else: Exit Sub
End If
End Sub


949:デフォルトの名無しさん
08/05/28 20:07:47
ありがとうございます
試したけどなかなか理想した感じにできなかったので、
ロック設定で我慢します・・

950:デフォルトの名無しさん
08/05/28 20:27:42
>>943
そうです。今の考えでは、
@フォームにあるボタンを押すとExcelが起動して、
A入力用のフォームに値を入力すると、
Bクチャクチャっと値が返されて、(大量の関数的な部分があるので、慣れたExcelのセルでやりたい。)
CCSV形式で出力されて、
D違うソフトにそれを読み込ませる、またはVBだったらそのソフトを外部から操作してやってみたい。
(そのソフトの仕様は全然わからんのだが。)


Dが無ければVBAでやれると思うんだが、Aの時に、ExcelVBAだと俺の知識ではマクロ実行中は
任意のセル編集ができない。

やっぱVBじゃないとダメ??



951:デフォルトの名無しさん
08/05/28 20:28:23
>>943
そうです。今の考えでは、
@フォームにあるボタンを押すとExcelが起動して、
A入力用のフォームに値を入力すると、
Bクチャクチャっと値が返されて、(大量の関数的な部分があるので、慣れたExcelのセルでやりたい。)
CCSV形式で出力されて、
D違うソフトにそれを読み込ませる、またはVBだったらそのソフトを外部から操作してやってみたい。
(そのソフトの仕様は全然わからんのだが。)


Dが無ければVBAでやれると思うんだが、Aの時に、ExcelVBAだと俺の知識ではマクロ実行中は
任意のセル編集ができない。

やっぱVBじゃないとダメ??



952:デフォルトの名無しさん
08/05/28 21:47:53
>>951
それって、100%ExcelVBAのような気がするけど・・・

953:デフォルトの名無しさん
08/05/29 09:23:10
共有されていないブックを、"読み取り専用"で開いているメンバーを
VBAで調べるのは不可能ですか。

954:デフォルトの名無しさん
08/05/29 09:59:49
VBAにCで言うDefineのようなものはないのでしょうか。
StaticステートメントをDefineのように使うのはおかしくないですか?

955:デフォルトの名無しさん
08/05/29 11:02:16
自分の家でつくったユーザーフォームが友達のPCで開いたら
背景色が変わってたんだけどなんで?

俺excel2000
友excel2002

956:デフォルトの名無しさん
08/05/29 14:31:16
ユーザーフォームの色は、絶対指定と、OSの設定にあわせる方法と
二種類あって、おそらく後者を適用しているのでしょう。

957:デフォルトの名無しさん
08/05/29 17:38:31
VBAに日本語化パッチを当てるにはどうすればいいのでしょうか

958:デフォルトの名無しさん
08/05/29 20:44:31
いろいろと検索してもわからなかったので質問させていただきます。
CSVファイルをエクセルファイルに変換したいのですが、特定の列だけを
文字列として処理を行いたいのです。
また、変換元のCSVファイルの指定をBATファイルを利用したいのですが、
よい手段がわかりませんでした。
なにかいい方法はありませんか??

959:デフォルトの名無しさん
08/05/29 21:15:00
Excel総合相談所 69
スレリンク(bsoft板)

960:デフォルトの名無しさん
08/05/29 22:26:56
VB Editor じゃなくて、自分の好きなエディタでマクロを書きたいのんですが、
何かいい方法ありますか?
今はエディタから全コピーしてVBA側に全ペーストしてます;;

961:デフォルトの名無しさん
08/05/29 22:52:06
俺は秀丸派でCもJAVAも書いてたんだけど
VBA使ってみてビビった。あれはVBAが
元始にして究極のエディタだと思うんだが。
関数の保管とかしてくれるしもう最高。

962:デフォルトの名無しさん
08/05/29 22:52:26
×保管
○補完

963:デフォルトの名無しさん
08/05/30 00:49:04
UserFormで変数を持つにはどうすれば良いですか?
UserFormにTextBoxを貼り付けてTextBox1を変数として使うのもよいのですが
内部で使う変数なので表示はしたくないです。

何をやりたいかというと、このUserFormでOKボタンを押されたことをBOOL変数に記録し、
そして呼び出し元で、OKが押されたかどうか判断したいです。
つまりMFCで言えば
CDialog dlg;
if(dlg.DoModal() == IDOK)
{
UserFormObj.Show
IF UserFormObj.bOk = TRUE THEN
 処理
END IF

見たいな事をしたいです。


964:デフォルトの名無しさん
08/05/30 00:50:38
UserFormで変数を持つにはどうすれば良いですか?
UserFormにTextBoxを貼り付けてTextBox1を変数として使うのもよいのですが
内部で使う変数なので表示はしたくないです。

何をやりたいかというと、このUserFormでOKボタンを押されたことをBOOL変数に記録し、
そして呼び出し元で、OKが押されたかどうか判断したいです。
つまりMFCで言えば
CDialog dlg;
if(dlg.DoModal() == IDOK) 処理
みたいな。

VBAだと
UserFormObj.Show
IF UserFormObj.bOk = TRUE THEN
 処理
END IF

って感じだと思ってます。


965:デフォルトの名無しさん
08/05/30 00:51:28
すみません。2重カキ子しちゃいました。。>>963は無視してね

966:デフォルトの名無しさん
08/05/30 00:53:35
すみません。2重カキ子しちゃいました。。>>963は無視してね

967:デフォルトの名無しさん
08/05/30 00:54:08
>>964
UserFormにOKプロパティを作る
又は、手軽に標準モジュールにPublic変数を宣言する

968:デフォルトの名無しさん
08/05/30 00:54:10
すみません。2重カキ子しちゃいました。。>>964は無視してね

969:デフォルトの名無しさん
08/05/30 00:56:33
>>967
ありがとうございます。

OKプロパティーというのがあるのですね。勉強になります。


#今日は書き込みがやたらエラーになる(:_:)。スレ汚しすみません。

970:デフォルトの名無しさん
08/05/30 00:59:35
>>969
ごめん、UserFormにOKプロパティ作っても、UserFormが閉じたら変数破棄されるからダメだね
Public変数でどうぞ

971:デフォルトの名無しさん
08/05/30 14:30:19
VCで作成したDLLを使用してVBAでプログラマしてます。

Private Declare Function DataRead Lib "ExcelVBA.dll" Alias "_CareerDataRead@4" (strFileName As String) As String・・・@

だと「DLLが見つかりません」と出てきます。そんで、Dllのパスをフルパスにしてやると動作するんですが、そすると他のPCで
パスがないので「Dllが見つかりません。」と出てきちゃいます。

できれば、ブックのあるフォルダにDLLをおいて@のように呼び出したいのですが、無理なのでしょうか?

972:デフォルトの名無しさん
08/05/30 14:46:15
>>971
つ環境変数

973:デフォルトの名無しさん
08/05/31 10:10:45
セルに挿入されているハイパーリンクを普通にクリックして、ページ先に飛ぶようなことを
VBAから実行することは可能でしょうか。

あと、ユーザーフォームにハイパーリンクを張ることは可能ですか?

974:デフォルトの名無しさん
08/06/01 01:36:15
例えば、PC起動時にあるソフトをアップデートしたいとき、VBAできたりするんですか?

975:デフォルトの名無しさん
08/06/01 01:46:21
そんなもんメールで告知しろ。

内部的なソフトで、アップデート(上書き)したいだけなら
バッチファイルとスタートアップのショートカットを駆使すりゃいいやん

976:デフォルトの名無しさん
08/06/01 15:16:33
VBAからSystem.Text.StringBuilderを使うとき、
オーバロードがどのAppend_数字に対応しているか調べるには
どうすればよい?

977:デフォルトの名無しさん
08/06/01 18:51:45
エクセル2000で

指定した名前で
CSVファイルで保存する方法ってわかりますか?


978:デフォルトの名無しさん
08/06/01 19:29:10
>>977
マクロの記録で出てこないか?

979:デフォルトの名無しさん
08/06/01 19:37:44
>>977
使ったことないけど、getsaveasfilename でいいんじゃない?

980:側近中の側近 ◆0351148456
08/06/01 20:32:46
>>977
(っ´▽`)っ
Excel2000のVBAでCSV保存すると、
日付型はことごとく文字化けするけどなー☆

981:デフォルトの名無しさん
08/06/01 20:44:27
>>978
>>977
サンクス


982:デフォルトの名無しさん
08/06/02 10:24:47
ビジュアル ベーシック フォー 哀川翔

983:デフォルトの名無しさん
08/06/02 15:11:45
>>980
普通に読めますが?

984:側近中の側近 ◆0351148456
08/06/02 20:44:29
>>983
(っ´▽`)っ
Jan 1 2007とかにならんかね?

985:デフォルトの名無しさん
08/06/02 20:51:41
>>984
文字化け?

986:側近中の側近 ◆0351148456
08/06/02 20:54:18
>>985
(っ´▽`)っ
これは文字化けじゃないか。
細かいことは気にするな☆

987:デフォルトの名無しさん
08/06/03 00:06:08
いわゆるマクロウイルスとかいうやつのコードの書き方教えて。
ウイルスチェックで引っかかるところを見てみたいだけです。

988:デフォルトの名無しさん
08/06/03 12:49:33
携帯からたどり着きました。スレ違いだったらすみません。
よかったらご教授願います。多分とても簡単な事だと思うのですが…超初心者です。
OSはXP、Excel2003です。


ファイルAの内容を、カメラ機能を使って、ファイルBに取り込もうとしています。
ファイルAのシート名は1〜31までの整数です。(1日1シート)
ファイルB上でマクロを実行した時、実行日に相当するシートの範囲を読むようにしたいのですが、以下のマクロでは、エラーになってしまいます。手直しして頂けないでしょうか。宜しくお願いします。


Sub カメラのリンクを編集()
Dim i As String
i = Day(Date)
ActiveSheet.Shapes("camera").Select
Selection.Formula "='G:\平成20年\[ファイルA.xls]i'!$A$1:$K$60"
End Sub




989:デフォルトの名無しさん
08/06/03 13:02:37
ここは手直しスレじゃないんだが。
せめてどんなエラーになったか位書こうよ。
あー、シート名が変数i(不適当な名前だw)に入っているのなら、文字列を組み立てないとダメだね。
>988では"i"と言う名前のシートを探そうとしてしまう。

990:デフォルトの名無しさん
08/06/03 13:03:52
×ご教授
○ご教示

991:デフォルトの名無しさん
08/06/03 14:55:10
>989、990
文字列を組み立てるというアドバイスの元見直しをして、無事完成しました。
スレ違い失礼しました、「ご教示」ありがとうございました。

992:デフォルトの名無しさん
08/06/03 15:38:51
質問したいけど構文ここに書くの面どくせえ

993:デフォルトの名無しさん
08/06/03 18:52:12
・・・

If ActiveCell.Column = 6 Then
Range("A1:A10").Copy ActiveCell
Else
MsgBox "ここは駄目"
End If

・・・

これだと6列目を先頭としてA1〜A10のセルをコピーでき、
6列目以外は入力不可でmsgboxが出るのですが、
例えば6列目〜10列目を入力可能にするにはどうしたら良いでしょうか?

994:デフォルトの名無しさん
08/06/03 22:18:12
オートシェイプの始点やら終点ってどういう単位?

Sheets(2).Shapes.AddLine(Xs, Ys, Xe, Ye).Select

たとえば、こうやって変数で当てて500から520までかけ。次に520から540までかけ
ってやっても線がつながらんのだが。

995:デフォルトの名無しさん
08/06/04 01:32:55
>>994
ちゃんとつながるぞ。単位はポイント

Sheets(1).Shapes.AddLine(50, 100, 100, 50).Select
Sheets(1).Shapes.AddLine(100, 50, 150, 100).Select
Sheets(1).Shapes.AddLine(150, 100, 100, 150).Select
Sheets(1).Shapes.AddLine(100, 150, 50, 100).Select


996:デフォルトの名無しさん
08/06/04 10:34:25
VBAを使用して作成したExcelファイルを立ち上げようとすると、
「問題が発生したため、Microsoft Excel for Windows を終了します。 ご不便をおかけして申し訳ありません。」
というMicrosoftのエラーになり、Excelが開かなくなってしまいました。
中のモジュールを何とか見る方法はないでしょうか?



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4266日前に更新/248 KB
担当:undef