Excel VBAについて Ver.2.0

このエントリーをはてなブックマークに追加
2デフォルトの名無しさん:03/06/09 19:25
>>前スレの994
>てかOption Explicitって先頭に追加したら赤くなったぞ
>いい加減なことばっか教えてんじゃねぇよ、死ねよ
激しくワラタ
なぜ誰も2ゲットしに来ない・・・・?
4デフォルトの名無しさん:03/06/09 19:27
>>前スレの994
とりあえず、お前の読んでる本だかウェブだかは捨てだ
スレタイにExcelとか激しく不要なのに
6デフォルトの名無しさん:03/06/09 19:42
こっちが本スレです。
http://pc.2ch.net/test/read.cgi/prog/1039685426/
7前スレで騒いでた奴:03/06/09 19:50
てかもう俺のこと忘れてる?
だって解決済みだし
9:03/06/09 19:56
してねぇよ、死ねよ
どうやら、高校の課題のようですな
で、お前らはいったい何なわけ?
13 :03/06/09 20:15
テンプレ

・質問する人は可能な限り具体的に書いてね。
・コード(プログラム)を晒すと、なおヨシ。
・質問を小出しにすると、大抵遠回りになります。
・Excelのバージョン、OSのバージョンも書くとレスが付きやすい。
・回答がなくてもキレないで。
・分かる人はできるだけ回答して下さいませ。
・書き込む前に推敲して、回答する人にわかりやすい文章に汁。
>>9
だから993が答えじゃん
だから995が答えじゃん。タイプミスなんかじゃねえって、まぢで。
ちなみにOffice 2002。てかまぢ困った。
16デフォルトの名無しさん:03/06/09 20:51
宿題は自分でやろうよ
>>16
。゚(゚´Д`゚)゚。
もう来ません
>>15
もう一万回コード見直せw
>>10をみると少なくとも3箇所はタイプミスしてる。
。゚(゚´Д`゚)゚。。゚(゚´Д`゚)゚。。゚(゚´Д`゚)゚。。゚(゚´Д`゚)゚。。゚(゚´Д`゚)゚。。゚(゚´Д`゚)゚。。゚(゚´Д`゚)゚。。゚(゚´Д`゚)゚。。゚(゚´Д`゚)゚。。゚(゚´Д`゚)゚。
何のスレ?ここ
つか、参考書自体がタイプミスしてるんだな。

初心者イジメて楽しいのか藻前ら・・・
22前スレの978:03/06/10 00:44
>>21
もとの「高校版情報活用テキスト」ではちゃんと動くコードです。
http://cscns.csc.gifu.gifu.jp/syozo/center/curriculum/kou_new/
リンクミスしているトホホなWebサイトだけど、
プログラミングを勉強するには良い課題もあるね。

イジメてはないと思うけど
訂正
前スレの978 → 前スレの982
24前スレの993:03/06/10 07:20
>>15
解答はタイプミスのところじゃなくて、その下なんだが……

> というわけで、上で宣言している配列変数あたりが疑わしい。つかそれだ。
25デフォルトの名無しさん:03/06/10 10:45
っていうか、エラーメッセージはコンパイルできんような状況だって言ってるんだ
から、タイプミスだろうがなんだろうがプログラムになってないってことだ。
つぅか、それくらいのことは自分の頭で考えろってことだ。
今からそんな調子ではプログラマなんて無理。
プログラマになる気もないのなら、課題も捨て単位も捨て進学も捨てて
土方にでもなってろ。
27前スレで騒いでた奴:03/06/10 14:25
俺の書いたソース、少し改変していいからFixしろ
ただしなるべく俺が書いたものに忠実にな
早くしろよ
ありがd
ぼくにもできたよ!
http://res9.7777.net/bbs/tiharu/20030610160718.1.gif
http://pc2.2ch.net/test/read.cgi/tech/1023755967/982を直してやったよ

Option Explicit
Private Sub CommandButton1_Click()
Dim strWeekday()
Dim strDate As String
strWeekday = Array("", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
strDate = TextBox1.Text & "/" & TextBox2.Text & "/" & TextBox3.Text
If IsDate(strDate) = False Then
TextBox4.Text = "Error"
Exit Sub
Exit Sub
End If
If (strDate <> Format(strDate, "yyyy/mm/dd")) And _
(strDate <> Format(strDate, "yyyy/m/d")) Then
TextBox4.Text = "Error"
Exit Sub
End If
TextBox4.Text = strWeekday(Weekday(strDate))
End Sub
31デフォルトの名無しさん:03/06/10 17:11
>>30
煽りに負けたな
32無料動画直リン:03/06/10 17:13
33情報課の教師:03/06/10 17:18
>>30
課題から外れた解答だから採点は0点です。
日付を計算して曜日を求めてください。
34デフォルトの名無しさん:03/06/10 22:02
日付の入力チェックを皆さんはどのように行っていますか?
>>30の方法は良いやりかたなのかな
35前スレで騒いでた奴:03/06/10 22:14
>>30をコピペったら動いた。正直、感動した。
まぁ、単に曜日が出ただけで別に何ともないと思ったけどね。てか俺のソースに忠実じゃねぇじゃねぇか
死ねよ
また何かあったら質問しに来てやるよ、じゃあな
お前ら死んでおけ☆
36前スレで騒いでた奴:03/06/10 22:20
てかね、そのソースの各コマンドがどういう働きをしてるのか書いてみろ
たとえば
Private Sub CommandButton1_Click()  (サブルーチンがどうのこうの)
とかね
全部書いておけよ
このままでは先生に説明できないから大変だな
結局奴は何一つ理解しなかったわけだな
こういうやつが社会に出てくることが一番不安だ・・・
40デフォルトの名無しさん:03/06/11 11:12
この程度の時点では社会に出てこないよ。少なくともプログラマとしては。
41前スレで騒いでた奴:03/06/11 12:18
やあプログラマ気取りの諸君、今起きたよ
つーか俺は別にプログラマなんかになるつもりはねぇよ
ただちょっとVBAに手をつけてみてわかんないことがあったから聞いたまでだ
つーか最初のうちはわかんないことがあればなんでも聞きますよ
つーかゴミレス返してないでさっさと俺の言われたとおりのことをしろ
いいか、今日中に書いておけよ
42デフォルトの名無しさん:03/06/11 20:51
存在がぬるぽ
前スレ見てないからお題が
分からんが、>>30を見る限り
strDate = TextBox1.Text & "/" & TextBox2.Text & "/" & TextBox3.Text
if IsDate(strDate) then
 TextBox4.Text = Format(strDate,"dddd") 
 'かTextBox4.Text = Format(strDate,"ddd")
else
 TextBox4.Text = "ちゃんと日付を入れろゴルァ"
end if
じゃだめか?
44デフォルトの名無しさん:03/06/12 11:22
すいません、教えてください。

Excel2000のVBAで、ユーザーフォーム上でreeditコントロールを使用して、
ユーザーに数十個のセルを選択させたいのですが、試しにやってみたところ、
約20個ほどクリックしたところで、ポーンと音が鳴って、
選択したセルのアドレスがコントロール内から消えてしまいます。
恐らくコントロールに割り当てられているメモリによって、
取得できる最大文字数が制限されているのではないかと思うのですが、
何か良い解決方法がありましたらご教授くださいませ。

よろしくお願いします。
45前スレで騒いでた奴:03/06/12 11:25
てかまだ俺の問題が解決してません。
>>44はすっこんでてください
>>45
Option Explicit
Private Sub CommandButton1_Click()
  Dim strDate As String
  strDate = TextBox1.Text & "/" & TextBox2.Text & "/" & TextBox3.Text
  If IsDate(strDate) Then
    TextBox1.Text = Year(strDate)
    TextBox4.Text = Format(strDate, "dddd")
  Else
    TextBox4.Text = "Error"
  End If
End Sub
47あぼーん:あぼーん
あぼーん
ゴミレスしてないで早く書け
死ねよ
てかお前ら俺の言ってる意味わかってる?
お前ら低脳だから全然わかってないぽだけど・・・
てかお前ここのスレに書かれてることわかってる?
お前は荒らしてるだけだから全然頭使ってないぽだけど・・・
>>45
Option Explicit
Private Sub CommandButton1_Click()
  Dim strDate As String
  strDate = TextBox1.Text & "/" & TextBox2.Text & "/" & TextBox3.Text
  If IsDate(strDate) Then
    TextBox1.Text = Year(strDate)
    TextBox4.Text = Format(strDate, "dddd")
  Else
    TextBox4.Text = "Error"
  End If
End Sub
だからね、例えばそのOption Explicit っていうのはどういう意味があるんですか?
それを書いて欲しいわけですよ。わかる?とにかく書いて欲しい。それこそ全部書いて欲しい。
次のPrivate Sub CommandButton1_Click() っていうのはどういう意味があるんですか?
早く全部書け
54デフォルトの名無しさん:03/06/12 12:15
Option Explicit
は、モジュール内で使用するすべての変数を明示的に宣言することを
強制するオプション

これをいれておくと宣言のし忘れなどがなくなるので
バグが入る可能性も減る










教科書読めばぁ?
教科書なんか無ぇって。てかまぢで早く書け。
てかそろそろ授業出てこなきゃな。帰ってくるまでに書いておけよ☆
58デフォルトの名無しさん:03/06/12 12:38
質問するくせに態度がでかいな

Private は他のモジュールから参照できないプロシージャを宣言するときに使う
Sub はプロシージャの名前
プロシージャ:
   実行時に 1 つの単位として処理されるコードの集まり。
   プロシージャには、Function プロシージャ、Property プロシージャ、Sub プロシージャの
    3 種類があります。通常、プロシージャの名前は、モジュール レベルで定義します。
   実行可能なコードは、すべてプロシージャに含める必要があります。
   プロシージャを他のプロシージャ内にネストすることはできません。

CommandButton1_Click()
はプロシージャの名前

ほっとけ。あらしなら説明しても無駄だし、
そうでなくても十分ヒントが出ているからあとは調べられるはず。
どちらにしろもうレスする必要はない。
ここにいるやつらって、冷たいこともあるのに妙にやさしかったりもするのな。

Option Explicit なんて基本中の基本だし、例えばヘルプで Explicit を
検索すれば、こんな掲示板で聞かずともわかる範囲の話。

こんなことさえできない・しないやつがプログラムを組んだって
どうしようもないんだから、放置すりゃいいのに。
全部書けっていってるのがわかんないの?殺すよ、まぢで
てか俺は荒らしてるわけじゃなくて純粋に質問してるんだからな
お前らがわけのわかんないゴミレスしてないでさっさと質問に答えれば荒れずに済むのがどうしてわからないんだ
死ねよ低脳。
63デフォルトの名無しさん:03/06/12 16:10
うーむ、調べもので検索してて、こんなの見つけた。
前スレでたくさんのシートを使ってた人がいたので、要注意ですな。

■ シートを増やす運用での問題点

 シート枚数が増えればそれだけメモリを消費する。計算式を多く設定してもメモリを多く消費する。
計算式を多く設定したシートで、枚数を増やす運用をした場合、ブックが開けなくなる事故が頻発している。
 また、フォントや罫線の設定の組み合わせを多く設定し、ブックが開けなくなる事故も多発している。
これは、表示形式(フォントや罫線の組み合わせ、Excelの表示形式の概念とちょっと異なる)が4,000という制限がある為。
 解決方法は、シートを増やす運用はなるべくさけて、ブックを分ける。
 シートの最大数は、メモリに依存する。計算式を多く設定すれば、それだけシートの作成可能な数は減る。
経験則から、簡単なシートで数十枚程度であれば運用可。ただ、ブックのバックアップ(世代や週間/日間)が最低必要。

ところで以後>>62は無視ね。
62は釣ってるつもりが実はかなりの釣られ野郎だな。ちょっとオモロイ。
65 :03/06/12 18:19
>>62
この手の低級な屑にあらされてしまうにはもったいない良スレなんで、皆さん、黙殺しませう。
>>65
いやいや、>>62から伝わってくる必死さは近頃の若者には見られなくなってる。
その意味では却って好感さえ感じられるよ。
たのむからまぢで教えてくれ
そしたら大人しく消えてやるから、もう来ないから
>>67
うんうん、その必死さが好感を呼ぶのだよ。
                   _,,,,,.........,,,,__
                 /:;:;:;:;:;:;:;:;:;:;:;:;:;,丶
 早いとこ全部書けよ…  /:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;.,ヽ
                 i' ' ' ' ' ' ' ' 'i;:;:;:;:;:;:;:;:;.,|
    ,.-‐¬ ̄-、¨¬‐、  |\,. 、/  L:;:;:;:;:;:;.;.l
   ////""`'""''ヽソ-‐l=・= =・=  ヽ:;/¨iノヽ、
  //////」  -=== }  |         ,ノ./lllll/、
  i//ノソ,._______,.""'  '".i,  l `_       ./lllll/  ヽ
  ヽ彡i.6 ̄ ̄i.,__ノ⌒i.,_ノ ..::ゝ.,_____,,,...- /llllllll/    ヽ
  /ヽ ゝ'    ,rti.l.l.l.、)ゝノlllllllllゝ.,__,ノlllllllllllllソ     .}
⌒`ヽ、ヽ li       ./ヽllllllllllllllllllllllllllllllllllllllliゝ /    /
、   V ヽ ゝ  _,......__ ノノ  ヽllllllllllllllllllllllllllllllllli/    ./
丶、,.、,ヽ     ミ三   ` ¬ ‐‐---‐¬ ¨ ̄
        ((   ̄ ̄ ¨¬‐- ..,_
          l 川 |
71デフォルトの名無しさん:03/06/12 21:47
明日からVBA生活の新人でつ。
これだけ教えて下さい。
可変長なリストオブジェクトの名前。
リストオブジェクトって固定長のあったっけ?
73デフォルトの名無しさん:03/06/12 22:13
>>72
つぅかリストオブジェクトって存在するんですか?
Collectionオブジェクトも登録順で取り出せることが保証されるならそれで良いんですが。
死ねよ
Key に Str(coll.Count) でも入れておいて coll(Str(index)) するんじゃ駄目?
7644:03/06/13 00:05
>>60
レスありがとうございます。
読んでみましたが、残念なことに私のケースとは違うようです。
私の場合は、エラーが発生するのではなくて、
refeditコントロール内のセルアドレスが消えてしまうだけなんですね。

引き続き解決方法を募集してます。皆さん、よろしくお願いします。
>>75
それなら素直に整数型入れるよ。と、言うか重そう。
イメヌ経由なのに直リンとか言ってるバカってまだいるんだ・・・
79デフォルトの名無しさん:03/06/13 12:04
頭のhをカットしないっつー意味で直リンて書いてるのに
杓子定規にしか捉えれないバカってまだいるんだ・・・

専用ブラウザ使ってないバカってまだいるんだ・・・
テスト厨参上!
直リンの意味がわかってないバカってまだいるんだ・・・・
きっと未だにホームページとかそういう言葉使ってるタイプだな・・・
83デフォルトの名無しさん:03/06/13 15:06
ゴミレスしてないで早く書け
死ねよ
Excel2000のVBAを使い,SQL2000のテーブルを
Recordset取得するにはどうしたらよいでしょうか?
ちなみにこんなの書きましたけど全然でした

SQLNAME = SQLOpen("DSN= DataBaseName")

Set R = New ADODB.Recordset
R.Open "SELECT * FROM T_テスト", SQLNAME.Connection
ホームページという言葉はあまり使われなくなったが、別にホームページという
言葉自体が無くなったわけではない。

ホームページとはマイホームページの意味だ。ブラウザのアイコンにホームと
書いてあるアレだ。

だからIEをデフォルト設定で使っている人は、私のホームページはMSNのサイト
ですと言わなければならないので、ちょっとややこしい。
86デフォルトの名無しさん:03/06/13 16:15
ていうか、正直どうでもいいよ
直リンだのホームページだの。

フツーの人は伝わればそれでいいと思われ。
むしろこのスレの存在自体がどうでもいいな

次スレ立てろなんて誰も書いてなかった筈なのに
88デフォルトの名無しさん:03/06/13 16:54
すいません おねがいです 助けてください
2000でユーザフォーム上のテキストボックスに文字を表示させたいんですが
セルの文字を改行させて、連結したいんです。

txtbox.Text = ActiveCell.Offset(, 3) & vbCrLf & ActiveCell.Offset(, 4)
としても改行されないんです。
で、改行コードっていうのか「q」みたいなんが出るんです
VBCRLFを Chr(13) & Chr(10)としてもだめでした

どなたかよろしくお願いします。

8988:03/06/13 16:59
自己レスまことにもうしわけございません。
解決しました
MultiLineプロパティがfalseになってました
大変失礼いたしました
>>84
ADOを使うことを薦める。

「参照設定」で [Microsoft ActiveX Data Objects 2.X Library] を参照します。

' ADOのオブジェクト変数を宣言する
Dim cnn As New ADODB.Connection
Dim rec As New ADODB.Recordset
' 接続を確立する
cnn.Open "Provider=SQLOLEDB;" &
    "Data Source=(local);" & _
    "Initial Catalog=pubs;", "sa", ""
' SQLステートメントを指定してレコードセットを作成する
rec.Open "select * from publishers", cnn, _
    adOpenKeyset, adLockOptimistic
9184:03/06/13 17:40
>>90
レスありがとうございますた。
初心者ゆえcnn.open内のパラメータが理解できず四苦八苦しております
>次スレ立てろなんて誰も書いてなかった筈なのに

なんか典型的ダメ人間が混じり込んでるね
スレっていうのは立てたいから立てるんだよ、わかるかな?指示を待つだけの奴隷くん
93デフォルトの名無しさん:03/06/13 21:01
質問させていただきます、どなたか教えていただけませんか
ユーザーフォームイメージコントロールを配置して、そこにイメージを読み込んでから
ユーザーフォームの大きさをイメージに合わせたいと思っています。

loadpicture関数でイメージを読み込むところまではいいんですが、
フォームのheightプロパティを、イメージのheightと合わせても、タイトルバーの
高さ分切れてしまいます。

VBだとScaleHeightが使えるようですが、ヘルプ見たところ、VBAではなんか違うメソッドに
なっているんですか?
このような場合、どうやってイメージの大きさとユーザーフォームの大きさを合わせればよいのか
どなたかよろしくおねがいいたします。
下手な文章で申し訳ないです
>>92
どう見ても前スレで騒いでた奴を釣る為に立てたとしか思えないんだが……
>>94
つーか1=前スレで騒いでた奴だろ

個人的な理由でスレ立てるな > 1
スレ立てるのって大多数が個人的な理由だと思うんですけど・・・・
てか釣られたのを素直に認められない人なんですね、皆さん
98 :03/06/13 21:56
どーのこーの言って、投稿と回答が続いているからそれでええやん。
まったく廃れているんならともかく。

いや、回答は確かに続いてるが、解答はあまりされていないと思うんだが
要するに回答者がヘタレ揃いなわけだ
101:03/06/13 23:00
いいこと言った!!
102デフォルトの名無しさん:03/06/13 23:11
100自体はいいことでもなんでもない単なる事実認識だ。
103>>100-101:03/06/13 23:12
てか自演なんですけどね
104デフォルトの名無しさん:03/06/13 23:16
前スレ974について詳しく知ってる人はいないんですか?

アクティブシート以外のRangeにCopyFromRecordsetメソッドを実行しても、
アクティブシートのNumberFormatLocalが変わってしまうってやつ。

なんでこんな動作なのか私も知りたいです。
105デフォルトの名無しさん:03/06/13 23:51
前スレ知らないんだが、Format系の関数・メソッドではよくあること。仕様を把握
しないで経験だけで使わないほうがいいよ。
>>77
たわけ。Collection のキーに整数型は入らん。
もしやと思って確認してしまったではないか。

Sub test3()
Dim val As Long
Dim col As New Collection
For val = 1 To 100000
col.Add val, val
Next
For val = 1 To col.Count
If val <> col(val) Then _
Debug.Print col(val)
Next
End Sub

>col.Add val, val
で実行時エラー'13'「型が一致しません」

コレクションの各メンバの処理をするときに、位置を表す数値の代わりに
使用できる重複しない文字列を文字列式で指定します。
ヘルプより
>>105
そうか、DAOではなくてFormat系の問題なのか。
・・・そう言われてみれば、Rangeのメソッドだものな。
108デフォルトの名無しさん:03/06/14 20:38
VBAのフォームの内容を自動で書き換える(ラベルとか)方法って
ありますかね
109デフォルトの名無しさん:03/06/14 20:50
VBAでwavファイルをならす方法を
教えてください
>>109
APIのsndPlaySoundを使用
>>108
何がしたいのだろう
>>109
Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" ( _
ByVal lpszName As String, _
ByVal hModule As Long, _
ByVal dwFlags As Long) As Long
Private Const SND_ASYNC = &H1 ' play asynchronously
Private Const SND_FILENAME = &H20000 ' name is a file name



PlaySound "C:\WinNT\Media\ringin.wav", 0, SND_FILENAME Or SND_ASYNC

なのだ。
113デフォルトの名無しさん:03/06/15 01:02
VBでオナニしたいのですがどうすればいいですか
本当に困ってるのでお願いします
>>113 まずぐぐれ。
115デフォルトの名無しさん:03/06/15 18:58
>>113
適当なツール類を作る。内容はなんでもいい。
  ↓
サポートサイトを立ち上げる。
  ↓
サイト内でそのツールがいかに有用か、説きたおす。
  ↓
そのツールとあなた自身のファンサイトも作る。
  ↓
ある程度コンテンツが充実したら、ここにurlを貼る。

カナーリ気持ちのいいオナニーができるでしょう。
俺はキャラ的にそういうのは無理です(´・ω・`)
教えてください・・・

Private Sub Worksheet_Change(ByVal Target As Range)
test(Target)
End Sub

Private Sub test(ByVal aaa As Range)
〜〜〜
End Sub

ってやると
実行時エラー’424’:
オブジェクトが必要ですって・・・
Target はオブジェクトじゃないの?
>>116
test Target
または
Call test(Target)
118116:03/06/15 23:15
>117
あっ
Callが必要だった・・・

ありがとうございます。
As stringってどんな意味?
>>119
入門書から出直せ。
121デフォルトの名無しさん:03/06/16 10:35
Dim 弦 as string

弦はストリングですよ〜、だ。
ストリングって何だ?となると、本来は Character String。
ひと続きの文字の並び。

んじゃDimは?とくれば、Dimensionの略。
昔のBasicでは配列の宣言にDimを使ってたけど、変数の宣言として統一された。
122(=゚Д゚):03/06/16 12:59
Hyper Dimension
>>120
こういうやつって最低だよね
放置するわけでもなく「検索しろ」。おぉ、嫌だ
おまえみたいなゴミはこのスレにいらないから消えろ。そして市ね
>>123
おまえもゴミ
おまえもゴミ
>>119
ヘルプでDimを調べろ
こういうやつって最低だよね
放置するわけでもなく「検索しろ」。おぉ、嫌だ
おまえみたいなゴミはこのスレにいらないから消えろ。そして市ね
>>123 >>127 は放置でおながいしまつ
これから質問攻めするけどいい?
何よ、報知なわけ?
いつもお世話になります。お尋ねしたいのですが
strWeekday = Array("", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
とはどのような意味なのでしょうか?教えていただければこれ幸いでございます。
変数に配列を渡している
いつもお世話になります。お尋ねしたいのですが
strDate = TextBox1.Text & "/" & TextBox2.Text & "/" & TextBox3.Text
とはどのような意味なのでしょうか?教えていただければこれ幸いでございます。
>>134
TextBox1.Text と "/" と TextBox2.Text と "/" と TextBox3.Text を
結合して strDate に代入してる。
つまり 年月日 の間に / を入れてひとつの文字列にまとめたわけだ。

で、次はこう書いてくるのかな?

If IsDate(strDate) = False Then
TextBox4.Text = "Error"
とはどのような意味なのでしょうか?
いつもお世話になります。お尋ねしたいのですが
If (strDate <> Format(strDate, "yyyy/mm/dd")) And _ (strDate <> Format(strDate, "yyyy/m/d")) Then
とはどのような意味なのでしょうか?
チン  ☆  マチクタビレター  ☆ 
       チンチン           マチクタビレター ♪
           ♪   ☆ チチン
    ♪                .☆   マチクタビレター
        ☆ チン   〃  ∧_∧  ヽ        / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ   ___\(・∀・ ) /\_/ <  回答マダー
        チン    \_/⊂    つ    ‖    \__________
           / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|     ‖  
        |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :|   /|\ 
        |             |/ 
>>136
strDateを西暦の年月日に変換して比較することにより、
年月日の入力が西暦で正しく行われているかチェックしている。
>>138
もう遅いよお前
死んでいいよ
>>139
まさか、136さんじゃないですよね・・
141デフォルトの名無しさん:03/06/17 14:59
私今エクセルでVB学んでるんですけど、誰かちゃんと理解可能なVBを教えてくれるHP知らないですが?教えてください。(σ´Д`)σゲッツ!!
>>141
VBじゃなくてVBAだろ?正確に書けヴォケ。その手のサイトなんかぐぐったらいくらでもみつかるだろ。
理解可能なVBってなんだろう・・・

つか、あなたの主張って、

わたしが理解できないのは、あなたの教え方が悪いからだ

ってやつですか?
144デフォルトの名無しさん:03/06/18 01:16
結局、誰も教えてくんねぇのかyo!
正直、学んだことなんか無いけど、ヘルプと例だけで事足りてる。

本とかもリファレンス系しか買わなし、今はそれすら手元に無いな
146デフォルトの名無しさん:03/06/18 22:26
VBAの短所と長所はなんですか?詳しく教えてください
短所:アプリケーション依存である
長所:アプリケーション専用である
148_:03/06/19 20:53
教えてください

excelでシート1を表示したままシート2のA1の関数をA10までコピーするにはどうすればいいのでしょうか
シートをアクティブにしてからなら、autofillやselection.copyがありますが、シート1を表示したまま
処理を行いたいのです

149デフォルトの名無しさん:03/06/19 21:52
>148
Sub test()
Worksheets("Sheet1").Activate
Worksheets("Sheet2").Range("a1").Copy
ActiveSheet.Range("A1:A10").Activate
Paste
End Sub

でよいかな
コピーしてペーストは止めた方がいい悪癖だと思う。

Option Explicit

Sub ボタン1_Click()
Worksheets("Sheet1").Activate ' 別シートを表にしておくためで、不必要
With ThisWorkbook.Worksheets("Sheet2")
.Range("a2:a10").FormulaLocal = .Range("a1").FormulaLocal
End With
End Sub
あ、配列数式を考慮するなら、こう。

Option Explicit

Sub ボタン1_Click()
ThisWorkbook.Worksheets("Sheet1").Activate ' 別シートを表にしておくためで、不必要
With ThisWorkbook.Worksheets("Sheet2")
Dim rngSrc As Range
Set rngSrc = .Range("a1")
Dim rngDst As Range
Set rngDst = .Range("a2:a10")
If rngSrc.HasArray Then
rngDst.FormulaArray = rngSrc.FormulaArray
Else
rngDst.FormulaLocal = rngSrc.FormulaLocal
End If
End With
End Sub
152デフォルトの名無しさん:03/06/20 00:05
うーん、思いがけず勉強になりますた
153148:03/06/20 10:29
>>149
>>150
>>151
ありがとうございました
助かりました

どうしても一人でやってると、煮詰まってしまって進まないんで
本当に助かりました

周りの人に聞いても「へ?VBA?エクセルの?シラネ」
で終わり

ありがとうございました
154デフォルトの名無しさん:03/06/24 14:09
すいません、どなたか、助けて。
VBAで、
Range("BQ2").Formula = "=if(ISERROR(FIND(BQ$1,$I2)),"",find(bq$1,$i2))"
と言う風に、IF関数で、ヌルを条件によっては出力するような式を入力させたいのですが、
これって、""が途中で切られるのかエラーになってしまいます。
IF関数がtrueの場合の""の替わりに何かセルなどを参照させると問題ないのですが、
今のままではエラーになります。
どうしたらよいでしょうか。m(_ _)m

お教え下さいませ。
155デフォルトの名無しさん:03/06/24 15:27
""を""""にはできないの?
156デフォルトの名無しさん:03/06/24 15:28
""""
とやってエスケープさせる。
157デフォルトの名無しさん:03/06/24 15:37
>>155,156
すいません、助かりました。ありがとうございます。m(_ _)m
158デフォルトの名無しさん:03/06/24 16:51
Excel2000から、VBAで、メールを送信したいんですが、そこで質問です。

Windows2000以前までなら、

Application.MailLogon
ActiveWorkbook.SendMail Recipients:=TargetSendMailOnly, Subject:=TargetFileName$

で、OutlookExpressで送信すること出来たのですが、WindowsXPで同じコードを走らせると、
メールソフト(OutlookExpress)を認識してくれません。

どうか教えてください、エライ人_| ̄|○


>>158
[ファイル] - [送信] のメニューが同じかどうか確認してみ
違ってりゃ MAPI.DLL だか MAPI32.DLL だかがないということだ
一番手っ取り早い解決法は Outlook をインスコ&アンインスコする
160デフォルトの名無しさん:03/06/24 20:33
ユーザ定義型のメンバ、lParam As LongになんとしてもNULLで終わる文字列へのポインタを
代入したいんですが何かいい手はありますか?

上記が実現できるならlParamの型は問いません。最終的にそれが文字列へのポインタが格納
された4Byteの整数型変数ならば。
161デフォルトの名無しさん:03/06/24 20:58
>>160
lstrcpy, lstrlen, lstrcmp,lstcatあたりの関数は?
162デフォルトの名無しさん:03/06/24 21:05
GlobalAlloc()と一緒に。
>>162
オイオイ、メモリ確保はどうす・・・・神!!!!

GlobalLockで得られた「Long型」の整数を引数にlstrcpyを呼んで、その後にlParamにその「Long型」の整数を代入すればいいのか。
兄貴!ありがとう!!
自作自演ご苦労様です。
165161,162:03/06/24 23:08
自作自演じゃないし・・・
166158:03/06/25 16:57
>>159

再インスコしたら、出来ました(つД`)
こ、こんなことで引っかかるなんて・・・・_| ̄|○

情けないので、吊ってきます。

ご指摘ありがとうございました。m(. .)m
どなたかご教授おながいします。

VBAでフォームを動かしたまま、
セルに入力などをするにはどうすれば、
いいのですかね?
Excelの2000を使用しているます。

何卒お教えください。
168デフォルトの名無しさん:03/06/26 16:58
指定したフォルダの中にある全てのファイルを読み込む処理をするために、For Each...Next ステートメントを使用したいのですが、
項目に何を指定してよいのか分かりません。
例えば、"C:\data"フォルダの中にある全てのファイルを処理対象とする場合は、どのように書けばいいですか?
(実際の読み込み処理の部分は適当でかまいません)
169デフォルトの名無しさん:03/06/26 19:39
DIR ヘルプでみてみ

170デフォルトの名無しさん:03/06/26 19:49
■■■かわいそうな「ゲーム君」を2ちゃんの力でトップにしよう!■■■

HSPプログラムコンテスト2003オンライン投票
http://www.onionsoft.net/hsp/contest2003/entryn1.html

HSPプログラムコンテスト2003に一番乗りで出展したものの              
Windowsに標準でついてくるゲームを手軽に起動できるという(というかただのショートカットつめあわせ)
しょーもないプログラムでたたかれまくっているプログラミング暦3年(!)の高校生の
作品、ゲーム君をみんなの力で一位にしよう。                   
【【【 投票方法 】】】             
http://www.onionsoft.net/hsp/contest2003/entryn1.html の一番下、エントリーNo8の「ゲーム君」
評価を「A」で選んでコメントを記入して「送信」(コメントいれるとなおよし)           
http://www.onionsoft.net/hsp/contest2003/eval/eval.cgi?md=cmt&id=8
でいままで送信されたコメントが見えるよ!(けっこう笑える)    
順位 http://www.onionsoft.net/hsp/contest2003/eval/eval.cgi              
>>167
vbModeless
>>171

オオォ!
出来ましたありがとうございます
173デフォルトの名無しさん:03/07/01 12:04
こで作ってみたんですがインデックスがないってできます・・
だれかおしえてくださいませんか
Sub 作業日取得()
Dim program_id As Integer
Dim start_date As Integer
Dim end_date As Integer
Dim check_start As Integer
Dim row As Integer
Dim col As Integer
Dim c As String
Dim start_flag As Boolean
program_id = 3'IDの番号()
start_date = 9 ' 開始日番号()
end_date = 10 ' 終了日番号()
check_start = 11 ' ■形式のデータが入っている最初の列番号(1オリジン)
With Sheets("表(詳細)")
row = 3
174デフォルトの名無しさん:03/07/01 12:05
Do While .Cells(row, program_id).Value <> ""
.Cells(row, start_date).ClearContents
.Cells(row, end_date).ClearContents
col = check_start
start_flag = False
Do While col < 200
c = .Cells(row, col).Value
If Trim(c) <> "" Then
If Not start_flag Then
start_flag = True
.Cells(row, start_date).Value = .Cells(1, col).Value
End If
.Cells(row, end_date).Value = .Cells(1, col).Value
End If
col = col + 1
Loop
row = row + 1
Loop
End With
End Sub
初心者板から誘導されました・・・
どなたか教えてください。わからないくて・・・
初めてVBAやったものですから・・
175デフォルトの名無しさん:03/07/01 13:07
Do While .Cells(row, program_id).Value <> ""
.Cells(row, start_date).ClearContents
.Cells(row, end_date).ClearContents
col = check_start
start_flag = False
Do While col < 200
c = .Cells(row, col).Value
If Trim(c) <> "" Then
If Not start_flag Then
start_flag = True
.Cells(row, start_date).Value = .Cells(1, col).Value
End If
.Cells(row, end_date).Value = .Cells(1, col).Value
End If
col = col + 1
Loop
row = row + 1
Loop
End With
End Sub

VBA初めてで原因もわからないです。
もうどうしえちいのか・・
どなたかおしえてください
ごばくしましたすいません
>>173
.row = 3
178177:03/07/01 21:16
あ、つづいてたのね。
インデックスが無い、という話から想像すると "表(詳細)" シートの名前が
違っているのではないかな? "表 (詳細)" とか。
(半角) と (全角) も別物として扱われるので注意。
ちなみに、この時のエラーは

インデックスが有効範囲にありません。(Error 9)
181周 レイ君:03/07/04 20:58
マクロで無限ループを作りたいのですが、
どうしたらいいかわかんない。
グーぐるでも検索したけどそれっぽい情報もない。
そこで、皆様に簡単なのでいいので、
無限ループのプログラム書いてほしいわけ。
お願いしますよー。
>>181
do while(true)
loop
無限ループじゃないプログラム書く方が難しい。
184デフォルトの名無しさん:03/07/05 22:29
名言age
185デフォルトの名無しさん:03/07/06 02:09
>>183
EXCELでサーバ作るのはおやめになって!
>>185
187デフォルトの名無しさん:03/07/06 15:33
>185
エクセルでサーバ?実用性は無いが作れない事も無いよなw
どうせやるならアクセスでサーバ作った方が無難だろ
188デフォルトの名無しさん:03/07/06 22:22
VBAのprojectにかけられたパスワードを無効にしたいです。
パスワード解析やバックドアをつけるツールは売っていますが
これを使わずになんとかできないですか?
189デフォルトの名無しさん:03/07/06 22:38
何ゆえ?
教えて悪さされても困るし・・・
190デフォルトの名無しさん:03/07/06 22:48
職場の退職者が残していったEXCEL-VBAの技術計算プログラムの中身を調べたいです。
>>190
そいつに聞けばいいかと・・・
死んだわけじゃないだろ?
192デフォルトの名無しさん:03/07/07 00:01
実は僕がこの手で7Fから突き落として殺しちゃったんです。
パスワード聞いてからにすればよかった。
>>192
そうか・・・
イタコの力が必要だな
オカ板へGO!
>>193
ないすあいであ
195デフォルトの名無しさん:03/07/07 00:12
>>190
設計資料を拾うか、Excelのバグを拾うか、どちらかだね・・・
196デフォルトの名無しさん:03/07/07 21:44
結局avprp買って、バックドアから無理やり開いた。
すみません教えてください。
FileDialogはオフィスXPでないと使えないのでしょうか?
Application.GetOpenFilename と Application.GetSaveAsFilename は
97とかでも使えるはず。
>>198
Excel限定な。
えーと、忘れがちなんだがこのスレは。
201デフォルトの名無しさん:03/07/10 09:14
>196

くらっくしたの?
>>196
買ったのか
尻くらいすぐ見つかると思うがな
203デフォルトの名無しさん:03/07/10 22:06
仕事で使うので、買いました。

本当です。

この目を見てください。
>>203
見えません。
205デフォルトの名無しさん:03/07/11 21:37
ちょっとしたエクセルマクロを作るときに、電子署名を入れるのがめんどいです
かと言って使う相手にセキュリティを下げろとは言いにくいし・・・・
ローカル署名を作れるツールがOfficeに同梱されてるらしい事まではわかったんですが、
そこで手詰まりです。
どうすればいいでしょう?excel2000+Win2000+ie6です
SELFCERT.EXE の事だと思うんだが、電子署名を入れるのがうんぬん
の個所の意味が分かんない・・・
・・・ああ「めんどい」ではなくて「わかんない」なんだな。
意外と知らない人が多いので書いておく。次のテンプレに希望。

1. SELFCERT.EXE で名前を入れてデジタル署名を作る
2. Visual Basic Editor のツールメニューのデジタル署名でブックに署名
 ※ 標準モジュールかでマクロを書いておくこと
3. その署名入りのブックを実行するとセキュリティの警告が出るようになる
 ので「この作成者のマクロを常に信頼する」チェックボックスをONにして、
 マクロを有効にするボタンを選択してもらう

これでOK。
署名を削除するには「ツール(T)」->「マクロ(M)」->「セキュリティ(S)」の
信頼の置ける発行元で削除すればよい。
家のOfficeはXPだけど、会社の2000も同じ操作だったと記憶。
>>206
あぁありがとうございます。まさにソレです。
正直に「わからん」と書くべきでしたね。ゴメンナサイ
一度人に教えてもらったのですが、大分前の事で忘れてしまって・・・

今度からメモしておきます。

ありがとうございました!
208デフォルトの名無しさん:03/07/12 20:12
この中に1人中国人がおる!>>209やろ!
>>208
はぁ?しょうもないこと言うとったらしばくアルよ?ボケ。
210デフォルトの名無しさん:03/07/13 14:22
みんな行と列を格納する変数をなんて名前にしてる?
自分はgyo retu 。 なんか気恥ずかしい。
>>210
line, column
ln, cl
とかじゃダメ?
行番号や列番号を示すポインタのこと?
だったらi,jとかm,nとか
行 -> record -> rec or rcd
列 -> column -> col
>>210
変に凝った名前よりは判りやすくて良いと思うけど?
>>213
行はrowでは?
216デフォルトの名無しさん:03/07/13 20:18
Book A と Book B を読み込んで、
Book A の標準モジュールから
Book B の標準モジュールにある Public 変数の値を
参照したり書換えたりできるのでしょうか?
できるのであれば、どのように指定すれば
よいのでしょうか?
>>215
それだ!!
>>216
どっかのセルに値を書き込んでそれを参照するようにしたら?
>>219 THANKS.
やっぱりそれしかないのかなぁ。
>>220
Javaでいう(Javaだけではないかもしれないけど)
アクセサをつくっておいて、それからRunメソッドで
アクセスさせれば可能。

参照される方(Source.xls)
Public TestValue as long

Public Sub setTestValue(Byval v as long)
 TestValue = v
End Sub
Public Function getTestValue() as Long
 getTestValue = TestValue
End Function

参照する方
Sub Test
 Run "Source.xls!setTestValue", 100
 MsgBox Run("Source.xls!getTestValue")
End Sub
100が表示される。
222216=220:03/07/14 22:49
>>221
すごい! できた。

処理を分岐させるスイッチなので
シート上には表示したくなかったのです。
感謝三唱。
ありがとうございました。
ありがとうございました。
ありがとうございました。
223デフォルトの名無しさん:03/07/14 22:59
あいかわらずマ板とは思えない内容ですな。
ビソ板に帰れよ。
>>223=>>219
くやしい気持ちは分かるが、ここはム板だヨン。
225教えてください:03/07/14 23:46
Excelでフォーカスがあるところを任意の色に塗りつぶして
フォーカスが外れると元の色に戻す
というマクロを組みたいのですがどうもうまくいきません。
だれか助けてくださ〜い
226デフォルトの名無しさん:03/07/15 00:14
あるセルをクリックすると同じブック内の他のセルにジャンプする[ハイパーリンク]-[このドキュメント内]
の機能をマクロで実現するにはどのようにすればよろしいのでしょうか?
どなたか教えてください。
>>225
標準で色が変わるじゃん
228山崎 渉:03/07/15 09:37

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
>>226
「マクロの記録」を実行して、ハイパーリンクの編集をやってみてよ
230223:03/07/15 20:44
>>224
ちなみに漏れは>>219にたいして言ったつもりだったんだが。
マ板とム板はマジボケしてたよ、ごめんね。
231デフォルトの名無しさん:03/07/15 22:54
とんでもなく低レベルで申し訳ないのですが

do until (Col = "BF")
range(1,Col)
'--- ?
loop

同一行のカラムをひとつづつ右にアクセスするにはどうやればいいですか?
do until (Col = "BF")
range(1,Col)
'--- ?
Col = Col + 1
loop


まぁ、一歩間違えばあぼーんだが、これがないと始まらん。
dim MaxCol as Long
with ActiveSheet
 Maxcol = .Columns("BF").Column
 for c = 1 to MaxCol
  .Cells(1,c).Value = "ゴルア"
 Next
End With
Dim Bar As CommandBar
For Each Bar In CommandBars
Bar.Enabled = False
Next Bar
Application.DisplayFormulaBar = False
ActiveWindow.DisplayHeadings = False
235234:03/07/16 00:43
あ・・・書きかけで暴発

続き
上のやつを実行した後に、
ワークシートに貼り付けたコマンドボタンクリックで
別のシートをActivateして
Application.ScreenUpdatingを操作すると
表示がおかしくなるのはEXCELのバグですか?
236デフォルトの名無しさん:03/07/21 15:09
エクセルで質問なのですが、
例えばA列に上から 1,2,3,4・・・ と
B列にも 1,2,3,4・・・ と入れて行き、
C列の1に『=A1+B1』を入れて数式をコピーしていくと、
C列は 2,4,6,8・・・ となりますよね。

で、このC列の結果を別のシートにコピーしようとすると、
数式自体をコピーしてしまってうまくいきません。
2,4,6,8・・・ という数字をコピーするにはどうしたらいいのでしょうか。
>>236
VBAとは関係ないようですが・・・一応答えておきましょう。
「形式を選択して貼り付け」で「値」を選択。
以上!
238デフォルトの名無しさん:03/07/22 18:07
Do
debug.? "ゴルア"
Loop
239デフォルトの名無しさん:03/07/22 18:19
Sub Macro1()
Const lngMax As Long = 1000
With [A1]
.Value = "1"
.DataSeries 2, xlLinear, 1, 1, lngMax, False
.Resize(lngMax, 1).Copy .Offset(, 1)
With .Offset(, 2).Resize(lngMax)
.Formula = "=RC1+RC2"
Sheets.Add.[A1].Resize(lngMax).Value = .Value
End With
End With
End Sub
237=240
237は却下ですか・・・ではこんなところで。
Sub Macro2()
'エクセルで質問というから・・・
'しかたないのでVBA版ただし適当・・・
Const MaxRow = 10
Sheets("Sheet1").Select
For i = 1 To MaxRow
Cells(i, 1) = i
Cells(i, 2) = i
Cells(i, 3).Formula = "=RC1+RC2"
Next i
Range(Cells(1, 3), Cells(MaxRow, 3)).Copy
Sheets.Add
Cells(1, 1).PasteSpecial Paste:=xlValues
End Sub
=240
ごめん。Sheets("Sheet1").Selectはいらなかった。デバッグ用に使ったの残ってたでし。
>>240
つくづくレベルの低い方だな・・・。
>>242
レベルが低いと思う理由、または、
自分で書いたコードを乗せて欲しいな・・・
236のレベルなら、これで十分と思うが。
コピーしてペーストは止めた方がいい悪癖だと思う。
>>236 のレベルなら
>>237 が正解と思われ。
246_:03/07/30 21:39
質問です

excelVBAのフォームにリストボックスを作りました
リストには2列表示させたいのですが、どうすればいいのでしょうか
ColumnCount を 2に設定したのまではいいのですが、それぞれの列に値を入れることが出来ません
&でつなげて見た目には2列にすることは出来ますが
1列目のデータが10文字だったり20文字だったりしますのでずれてしまうのです
教えてください、お願いします
>>246
ListView使うのが良いと思うよ。
248246:03/07/30 21:54
247さん
早速の回答ありがとうございます
YaHOOで検索したところ
ListViewというのは何かのツールのようですが(現在も調べ中)

出来ればどノーマルのexcel2000,excel97で動かしたのです
ヤフーじゃなくてまずヘルプ内を検索したほうがよいかと
>>249
載ってないと思われ。
test
252246:03/07/30 22:41
ヘルプにはのってませんでした
OCXのようですね
配布を考えてますので、オフィスがデフォルトの状態で使いたいのですが・・・

Colmnは設定できるのに表示が出来ないとは思えないので
何かやり方があるはずだと思うのですが
>>246のおかげでひとつ賢くなった。
ExcelXPにはあるのにね。

一番初心者臭いのは
Len関数で文字数カウント→差分を" "で埋めるとか
>>246
できる。
ListboxのヘルプのColumnプロパティ or Listプロパティ
を読んでみれ。
255246:03/07/30 23:13
arrayを使ってやればよいのですね

additemで一軒ずつ取込むのではなく
arrayに取込んでから一気にlistで取込むということで合ってますでしょうか?
256246:03/07/30 23:14
sage忘れてましたすみません
257名無し@沢村:03/07/30 23:17
学校のおじさんのつくったExcelVBAを真面目に勉強している、へたれたちのいるスレはここですか?
客先がExcelファイルを要求しない幸運な人ですか?
259246:03/07/30 23:32
>>257さん、すみませんヘタレで
ですが、ヘタレなのは私だけなんで「たち」はやめて頂けませんでしょうか

>>258さん
そうです。最初はVBで作ってたのですが配布直前に「操作がよくわからんからエクセルで」といわれました
エクセルでよくやるコピー&ペーストや画面に合わせての拡大縮小などなどがないことが不満のようです

エクセルにした方がのちのち大変なことになるのはわかってるのですが
「やれ」と言われればやらなければいけない環境(説得出来る状況じゃないんですね、客先のほうが圧倒的に強いので)なので
エクセルで作ってます

多分というか絶対あとで大変なことになりますね
260246:03/07/31 01:50
肝心な事を忘れていました

レスくれた皆さんありがとうございました
あの、VBAにはVBのFileListBoxみたいなの無いんですか?
指定したディレクトリ下のファイルリスト情報が欲しいのですが、、、、
ShellでDIR叩いてリダイレクトでファイル作って解析するしか無いのでしょうか・・
正直困ってます。。

262デフォルトの名無しさん:03/08/01 20:16
>>261
Dir()関数
>>262
あれ、再帰するとなぜかページ違反を起こすので、個人的にはファイルシステムオブジェクトを勧めるよ。
>>263
横から申し訳ないけど、教えていただけ無いでしょうか。私もぜひそれを知りたいので、よろしくおながいします。
>>263
Excelで使えたっけ?
>>265
使えたよ。
使えた・・・
http://www.microsoft.com/japan/msdn/scripting/default.asp
Windows Script 5.6 ドキュメント ダウンロード (exe 形式; 1.67 MB)
からのパクリ&改変

Function ShowFolderList(folderspec)
   Dim fso, f, f1, fc, s
   
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set fc = f.Files
   
   For Each f1 In fc
      s = s & f1.Name
      s = s & vbCr
   Next
   
   ShowFolderList = s

End Function

Sub test()
    MsgBox ShowFolderList("C:\")

End Sub
268山崎 渉:03/08/02 02:04
(^^)
でもFileSystemObjectって、素の Win98 + Office97 環境じゃ使えないんだよねー。
Wsh5.6とか入れさせなきゃダメかな。
ExcelでVBAしてます。

フォームをモーダレス表示した直後に、Excelの方にフォーカスを戻すにはどうすればいいでしょうか?

271デフォルトの名無しさん:03/08/02 20:19
age
272デフォルトの名無しさん:03/08/02 20:22
>>270

form.Show vbModeless

の後に

ActiveWindow.Activate
Sheet1.Activate
Sheet1.Cells(1,1).Select

とか色々やってみたんですがフォーカスは依然としてモーダレスフォームのままでした。
273デフォルトの名無しさん:03/08/02 20:24
☆★ 新商品 ゾク・ゾク 入荷!! 急げ〜!! ☆★☆
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★ 送料激安!  スピード発送!  商品豊富!   
★☆      http://www.get-dvd.com        
☆★ 激安DVDショップ 「GETDVDドットコム」 
★☆      http://www.get-dvd.com        
☆★ 今すぐアクセス Let’s Go!   急げ! 
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
274直リン:03/08/02 20:38
275安全地帯:03/08/02 21:25
>>272
ちょっと強引に(あまりやらないほうがいいが)
form.Show vbModelessの後に
AppActivate "Microsoft Excel"
とか・・・
>>276
ばっちり成功しました。
Excel2000とかだと同名のファイルは同時に開けないようになっているので、ファイル名まで決め打ちすればOKっぽいです。
278デフォルトの名無しさん:03/08/03 04:21
マクロの登録されたブックがアクティブであるかを判定して、
それによってボタンを押した際の動作を変えるようなマクロを作りたいのですが・・・・・


’ボタンを押すと呼ばれる処理

If ThisWorkbook = active then
  '通常の処理
else
  MsgBox "ブックを最前面に表示してください"
End If

こんな感じでいけるか?と適当に作ってみましたが、動きませんでした。(当たり前)
よろしければご指導下さいな。
>>278
ActiveWindow.Name = "xxx.xls"
でいけるんじゃないの?
280デフォルトの名無しさん:03/08/03 07:17
ファイルからレコードを読むときなのですが、フィールドに
YYYYMMDDという8桁の固定長テキスト領域がありまして、それの
有効性を判断したいのですが、なんか上手く機能してくれません。

YYMMDDの領域には"01000101"〜"99991231"という数値文字列の範囲で
あればTrue。それ以外ならFalseということで動かしたいのですが、
文字列をそのまま比較演算をすると"0abcefg1"とか"9999abc1"もTrueになります。
Val関数で変換して比較すると"1000101"と"01000101"は等価になり、
Trueになってしまいます。

なんか巧いやり方って無いでしょうか?
当方Excel2000SP2の環境です。
>>280
if len(data) = 8 And Val(data) >= 1000101 And Val(data) <= 99991231 then
282278:03/08/03 10:10
>>279
そうか、名前を見ればいいんですね〜。
というわけで

If ActiveWorkbook.Name = ThisWorkbook.Name Then

とすることで、無事に期待した通りの動きをしてくれました。
ありがとうございます!
>>280
Stringのまま比較するから無理があるのです。
日付に変換してチェックすればよい。
284280:03/08/03 12:26
>>281
やっぱりそうなりますか・・・。
Cだったらchar配列でクルクルと比較すれば簡単なのですが、
VBAだと難しいんですね。

>>283
以前に試したときには
CDate(Format(Val(data.date), "#000/00/00"))
という感じでCDateしてみたのですが、この場合ストレートに
数値文字列が来ないと「型が一致しない」とされてエラー
ハンドルに手間がかかってしまい別の手段を探していました。

とりあえずLenで処理してみます。
ありがとうございました。
>>284
> Cだったらchar配列でクルクルと比較すれば簡単なのですが、

chr(a)
a = Right(a,Len(a) - 1)
99981233
287デフォルトの名無しさん:03/08/03 19:29
新しいブックを作成して、そいつの名前を変えて保存させてます。

WorkBooks.add
’いろんな処理
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="レポート" & format(now, "yyyy.mm.dd")).xls"
ActiveWorkbook.Close savechanges:=False

こんな感じで。
特定のディレクトリにしか保存できないのが嫌だったので、
ユーザーに保存する場所を自由に選ばせようと思い、
ダイアログボックスを開いてファイルを保存させるようにしました。

WorkBooks.add
’いろんな処理
ActiveWorkbook.SaveAs Filename:="実網Report(" & shtName & version & "_" & mydate & ").xls"
Application.Dialogs(xlDialogSaveAs).Show
ActiveWorkbook.Close

しかし、これだとダイアログボックスが出る前に勝手に保存されてしまいます。
かといって、三行目のActiveWorkbook.SaveAs Filename:〜〜 を抜くと、
book5とか適当な名前で保存されてしまうので、
自分でファイル名を書き換えなければなりません。
ダイアログボックスに出る名前を、自分で決めてやるにはどうしたらいいんでしょうか?
>>287
Application.GetSaveAsFilename
>>284
CDateではなくて、IsDateを使えばよいのでは
290287:03/08/03 21:40
>>288さん
できました!

Dim name As String
name = "レポート" & format(now, "yyyy.mm.dd")).xls"

If Application.GetSaveAsFilename(name) <> False Then
  ActiveWorkbook.SaveAs name
End If
ActiveWorkbook.Close savechanges:=False

こんな感じで、ダイアログボックスに指定したファイル名が出て、
ちゃんと保存することができました。しかし、喜んでいたのも束の間・・・・・・
同じディレクトリに同名のファイルがある場合に、無理やり保存しようとすると

1.上書き確認で「OK」を押すと何もないが、「いいえ」又は「キャンセル」を押すとエラー
2.その時にファイルを開いていたら、問答無用でエラー

となります。
どちらの問題も、エラーが出て然るべきで、かなり初歩的な質問に入ると思うんですが、
それをVBAで回避する方法がさっぱり分かりません(汗
真偽値なり定数なり、なんらかのメッセージを返して来てるとは思うんですが、
一体何が返ってくるのか分からないので、困っています。

宜しければご教授お願いします〜・・・
291287:03/08/03 23:05
よく調べると、エラー1004が帰ってきてました。
こいつをトラップしてやればいいんですね。
お騒がせしました。
>>291
name=の行も直しておいたほうがいいと思いますよ
293280:03/08/04 03:29
>>289
あっ・・・そうか。
VBAには情報関数があったのでしたね。

Lenで処理すると"a1000101"と"01000101"が判別できないと言う
バグが潜んでいたので作り直してみました。

'YYYYDDMMの各要素が数値かどうか判定する
For Element = 1 To 8 Step 1
If Not IsNumeric(Mid$(Data.Date, Element, 1)) Then
処理
End If
Next Element

'AD100/1/1〜AD9999/12/31の範囲にあるかチェック
If 1000101 <= Val(Data.Date) And _
Val(Data.Date) <= 99991231 Then
処理
End If

こんな感じで期待通りの処理ができました。

皆様ヒントありがとうございます
294デフォルトの名無しさん:03/08/04 10:18
複数のブックを開いた状態で、ブック間を移動させるボタンを作りました。
ボタンを押せば、次々とブックが切り替わります。

しかし、描画が完全に終わる前にボタンを押してしまったら、その操作は無効になり、
次の動作が変になってしまいます。
(画面は変更されなくても、ボタンを押した際に内部のカウンタが増加されているため)

ブックが完全に更新し終わるまで、ボタン操作を無効にすることはできるんでしょうか?
>>294
早いマシンを買え。
296283=289:03/08/04 10:32
>>293
私なら以下のような関数にします。
Public Function IsDate8(strDate As String) As Boolean
  IsDate8 = False
  If Not IsNumeric(strDate) Then
    Exit Function
  End If
  If Len(strDate) <> 8 Then
    Exit Function
  End If
  If Not IsDate(Format(strDate, "0000/00/00")) Then
    Exit Function
  End If
  If CDate(Format(strDate, "0000/00/00")) < #1/1/1000# Then
    Exit Function
  End If
  IsDate8 = True
End Function
月末が31日ではない月の処理や、うるう年のチェックも考えると
私はIsDateは使うべきだと思います。
297デフォルトの名無しさん:03/08/04 10:43
質問くんで申し訳ないのですが
数値の最大値と最小値を取得するのはどうやれば良いでしょう
セルA1〜A100まで数値が並んでいる時、最大の数値と最小の数値だけを
使用したいのです
最大値がどこのセルに入っているかは分からなくてもいいです
よろしくお願いします。
>>297
ヘルプか入門書見ろよ
Googleでもすぐ見つかるぞ
>>294
Private Sub ボタン_Click()
 ボタン.Enabled = False
 'ワークブック切り替え処理をここに
 ボタン.Enabled = True
End Sub
ではいかんの?

あらゆるユーザー操作を無効にするなら
Application.EnableEvents = False
'ワークブック切り替え処理をここに
Application.EnableEvents = True
とか

心配なら移動元でボタンを無効にして
Private Sub ボタン_Click()
 ボタン.Enabled = False
 'ワークブック切り替え処理をここに
End Sub

移動先のワークブックの更新後に有効にする
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
 ボタン.Enabled = True
End Sub
Cellの中にComboBoxを埋め込むことってできる?
Cellへの入力をComboBoxのリストの中から選択できるようにしたいんだけど
>>300
なぜ、やってみようと思わないのか。
やってはみました。
VBAのHelp調べてそれらしいプロパティを調べたり
ぐぐってみたけどそれらしいのがない。
Validation
>>303
サンスコ おかげででできました。
ホント厨房な質問して迷惑かけてスマン
305293:03/08/05 07:00
>>296

たびたびご指摘ありがとうございます。
>月末が31日ではない月の処理や、うるう年のチェックも考えると
この部分は至極ごもっともなので、提示されているプロシージャを作り直してみました。
(巧くインデントできるかな?)
Function IsDate8(strDate As String) As Boolean
  Dim Element As Integer
  IsDate8 = False
  For Element = 1 To 8 Step 1
    If Not IsNumeric(Mid$(strDate, Element, 1)) Then
  Exit Function
   End If
  Next Element
  If Not IsDate(Format(strDate, "0000/00/00")) Then Exit Function
  If 1000101 <= Val(strDate) Then
    If Val(strDate) <= 99991231 Then
      IsDate8 = True
    End If
  End If
End Function
フィールドに含まれる数値以外の文字や、内部でのシリアル値の処理も考えると、
恐らくこれが最適の方法となるんじゃないかと思ってます。
306デフォルトの名無しさん:03/08/05 10:24
スレ違いですが
B1=1
C1=2
D1=3

E1に123と並べる式を教えてください
308283=289=296 :03/08/05 12:45
>>296

  If Len(strDate) <> 8 Then
    Exit Function
  End If

  If InStr(1,strDate,".") > 0 Then
    Exit Function
  End If

>>305
IsNumericは1文字ごとに行う必要無い。ヘルプ嫁
IsDateでチェックしたあとなら、9999/12/31より大きな日付になることはないので
If Val(strDate) <= 99991231 Then は不要でしょ。
309283=289=296=308:03/08/05 12:48
>>308
以下も必要かな
  If (InStr(1,strDate,"+") > 0) Or (InStr(1,strDate,"-") > 0) Then
    Exit Function
  End If
310293:03/08/05 21:25
>>309
要件として終わったことに長々と指摘してくれたところで申し訳ないのですが、あなたの指摘で的確な部分は
>IsDateでチェックしたあとなら、9999/12/31より大きな日付になることはないので
これだけです。これは私の確認不足でした。

>IsNumericは1文字ごとに行う必要無い。ヘルプ嫁
あなたはヘルプ以前に要件を確認しましょうね。
例えば"001000"だけがTrueとなる必要がある場合でも、あなたのやり方では
"01,000"も" 1000"も"1000.0"も等価になります。
それらや算術記号を回避するために延々とinstr並べるってんですか?
そんな不細工なコーディングする感覚で良く平気ですね。メリットないでしょ。
それにダメ出ししているLen使ってたところとか、いつの間にか無意味に
日付型で大小比較してたりするところを無かったことにしてるところとか
見る限りでは「なんだかな〜」だし。

なんでこっちが敢えて使わないのかすら推量できない想像力。
あなた自分では出来るつもりなんでしょうけど、ハッキリ言うとプログラムのセンス無いですよ。
311309:03/08/05 22:28
293さん、失礼しました。
IsNumericの扱いは私の考えが足りてませんでした。
他人が真剣に考えているのに、思いつきで口を出すべきではありませんでした。
今回の件は私も勉強になりました。
なぜ293は必死なのかと
Office2000のExcelで、日本語中国語混在の文書を作ってます。
Excel自体の方はunicodeなので(不満は残るけど)一応両方扱えるのですが、
肝心のVBAが、どうも単一の言語しか想定してない仕様みたいですね。

例えば Worksheets("シート名")のようなのが、日本語版Excelで作ると
中国語版のExcelで動かないし、逆もまた然りです。
この辺うまく対処している方がいたら、どうしているか教えて下さい。
314313:03/08/07 21:05
すいません、うまく説明できてないので補足します。
VBAの部分をunicodeではなくSJISだとかBig5だとかのローカルコードで
持っているような気がします。なので、

> 例えば Worksheets("シート名")のようなのが、日本語版Excelで作ると

「シート名」の部分を日中どちらの文字セットでも使える漢字にしても、
SJISとBig5では同じコードに違う文字が対応するので、SJISで作っても
中国語版Excelに持っていくとVBAのエディタでは化けてしまいます。

日本語版ExcelのVBAエディタの「オプション」でBig5なフォント(MinLiU
だったか、そんな名前)にすると、中国語で書いたVBAコードがきちんと読めるの
ですが、それでもなお Worksheets("中国語名") みたいなので範囲外エラーに
なってしまうのが謎です。
また、プッシュボタンから呼び出すマクロではエラーになるのに、ワークシート
関数の中で使っている分にはエラーにならない、というのが更に謎で、もうわけ
がわかりません。
>>314
と、言うかフォント入れてないだけだったり名。
>>314
VBA使ったこと無いけど、UNICODEって、ページ指定出来なきゃ複数言語は混在でけんでしょ。
VBAにそんな仕組みあんの?
317パチンコ屋:03/08/07 22:38
初心者なのでどなたか教えてください!!
ファイル名"test.dat"(36バイト)ファイル内バイナリ
00 00 82 62 82 71 90 56 8A 43 95 A8 8C EA 82 6C
32 37 81 40 81 40 81 40 81 40 81 40 81 40 81 40
81 40 00 00
のうち"test.dat"のアドレス02〜21(計32バイト)を読み込んで
SHIFT-JISの文字に変換する方法をどうかお願いします!!
>>316
>UNICODEって、ページ指定出来なきゃ複数言語は混在でけんでしょ。
なんのためのUnicodeだとこ一時間
>>317
dim bytevariable(32) as byte
>>317

dim bytevariable(32) as byte

get #fil,,bytevariable

str = Strconv(StrConv(bytevariable,vbunicode),vbfromunicode)
321デフォルトの名無しさん:03/08/10 21:03
困ってます。誰か教えてください。
XP で EXCEL2002 VBA をコーデイング途中 EXCEL が固まってしまいました。
強制終了させて VBA のファイルを開くと EXCEL が固まります。
・EXCELを起動しファイル回復しても「ダメージが大きい」でダメ
・スキャンディスクしたが回復せず
・WORD で開いたがブックのデータだけでマクロはダメ
壊れたxlsファイルをテキストで開くとコードは残っているようなので
ツールか何かあれば回復しそうです。
(1つのソースコードだけ回復すればいいのですが・・)
業者に頼んでもいいですが、何かいい方法はあるでしょうか?
322321:03/08/10 21:18
今質問したばっかりですが解決してしまいました
バージョン違いのEXCELで読めばコードが出てきました
失礼致しました
323_:03/08/10 21:19
>>317
lstrcpy(StrPtr(str),array(0))
325デフォルトの名無しさん:03/08/11 23:08
Excelのマクロを使って、同じフォルダの中にあるすべてのExcelファイルを
起動させる仕様にしたいのですが、よく分かりません。
指定したフォルダの中にあるすべてのファイルを起動させる方法や、同じ
フォルダの中のひとつの指定したファイルを開くことはできたのですが、
前述した仕様にだけはどうしてもできませんでした。

初心者で申し訳ありませんが、どうしても知りたいので、誰か分かる方が
いましたら教えてください、よろしくお願いします。
>>325
ループで回す

Public Sub test(ByRef strPath As String)
Dim strXlsFile As String
Dim FileCount As Long
Const MaxFiles As Long = 10 'ファイル数制限

strPath = strPath & Application.PathSeparator

FileCount = 0
strXlsFile = Dir(strPath & "*.xls")
Do Until strXlsFile = "" Or FileCount >= MaxFiles
 FileCount = FileCount + 1
 Workbooks.Open (strPath & strXlsFile)
 strXlsFile = Dir
Loop
End Sub
>>325
死ねクソマルチ。
328デフォルトの名無しさん:03/08/13 20:33
質問です。
例えばA,B,Cの3文字の組み合わせ(同じ文字を使って良い)を
シートに列挙したいと考え以下の様なコードを書いてみました。

Sub textstr()

Dim Tex(1 To 3) As String
Dim i, j, k, rown, pass

rown = 1
Tex(1) = "A"
Tex(2) = "B"
Tex(3) = "C"

For i = 1 To 3
For j = 1 To 3
For k = 1 To 3
pass = Tex(i) & Tex(j) & Tex(k)
Cells(rown, 1) = pass
rown = rown + 1
Next
Next
Next

End Sub

しかしこれだと文字数が増えるとその分For〜Nextを増やさなければならず、
結果的に不格好なプログラムになってしまうと思うんです。
何か旨い方法(簡略なコード)ってないですかねぇ。。。
必要に迫られているわけではないのですが、いったん考え出すと気になってしまって。
329328:03/08/13 20:34
すみません。タブが消えて読みにくくなってしまいました。



public function arr(CharCount as Long,CharIndex as Long)


ってちょっと待て!パスワードクラッカーじゃねぇか!!
331328:03/08/13 21:03
えぇ。。。
早い話自分で作ったPass付Zipのパスを忘れてしまいまして。
でも朧気に使用した単語は憶えていたのでこんなことを考えてました。
寧ろ今はコードだけが頭の中をグルグル回っている状態で。。。
が、問題ある様なので無視してください。
スミマセンでした。
>>328
あるサイトで組み合わせについて書いてあったのが以下のやつ

Sub Macro1()

  Permute Range("A1"), "ABC"
End Sub

Sub Permute(ByRef rngData As Range, ByVal strData As String, Optional ByVal lngNum As Long = 1)
  Dim i As Long

  If lngNum < Len(strData) Then
    For i = lngNum To Len(strData)
      ' 再帰呼出
      Permute rngData, Left$(strData, lngNum - 1) & Mid$(strData, i, 1) & Mid$(strData, lngNum, i - lngNum) & Mid$(strData, i + 1), lngNum + 1
    Next
  Else
    ' 結果
    rngData.Value = strData
    Set rngData = rngData.Offset(1)
  End If
End Sub

333330:03/08/13 21:10
>>332
俺が書こうとしたのもそれだわ。
再帰だよな。基本は。
334328:03/08/13 21:20
おぉ、ありがとうございます。
ちょっと読んでみます。
まだVBAかじって間もないので時間かかりますが。。。

そう、今回は再帰ってのが使えるのでは無いかと思い、

sub a(云々)
call a(云々)
end sub

というのが使えるのではないかと勝手に思案してました。
335デフォルトの名無しさん:03/08/14 21:25
 ある条件が成立したら、メディアクリップオブジェクト(mpgファイルより読込済み)
を再生したくて次の処理を書いたのですが再生できません(オブジェクトが一瞬アクティブ
になりますが、再生できませんです)。
 なぜでしょうか、もっと良い方法をご存知のかた、教えてください。


If Adata > Bdata Then
waveon
Application.OnTime Now + TimeValue("00:03:30"), "plaympg" '次回起動設定
Else
Application.OnTime Now + TimeValue("00:02:00"), "plaympg" '次回起動設定
End I

Sub waveon()
ActiveSheet.Shapes("Object 4").Select
Selection.Verb Verb:=xlPrimary
End Sub
>>335
再生処理は?
337335:03/08/15 00:12
>336
すみません、マクロを記録した結果から作っただけでして、良くわかっていません。
自動記録の際には、メディアクリップオブジェクトを選択して、
さらにクリックしたら、再生されました。

その際の記録から、335に書いた下の処理で再生できるはずと思ってました。
ActiveSheet.Shapes("Object 4").Select
Selection.Verb Verb:=xlPrimary

なにか、足りないのでしょうか?
(努力が足りないのは、わかってます。教えてクンで申しわけないです)
>>337
>メディアクリップオブジェクトを選択して、
>さらにクリック
この部分は記録されないようだね。
339335:03/08/15 00:23
おお、そうですか。早速のレスありがとうございます。

ん〜、もうちょっと勉強します。
340デフォルトの名無しさん:03/08/15 13:39
341山崎 渉:03/08/15 15:11
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
342デフォルトの名無しさん:03/08/15 19:13
agedesuu
343デフォルトの名無しさん:03/08/20 13:48
すいません。エクセルのマクロで教えていただきたい事があります。

Book1で作成したシートを、Book2に移動させる動作を
繰り返すプログラムを作成しています。ところが、9回ほど繰り返すと
「moveメソッドが失敗しました。」とエラーが出て終了してしまいます。
悩んだ挙句、以下のサンプルプログラムでも同様の現象が発生しました。

Sub aaaaa()
For i = 1 To 100
Windows("Book1.xls").Activate
Sheets("Sheet3").Select
Sheets("Sheet3").Move After:=Workbooks("Book2.xls").Sheets(1)
Sheets("Sheet3").Select
Sheets("Sheet3").Move After:=Workbooks("Book1.xls").Sheets(1)
Next i
End Sub

このサンプルは、Book1とBook2を用意し、Book2には
Sheet3を削除しておいて起動します。


作成環境は
OS :WindowsXpHome
メモリ:512M
excle :Excle2002


もし、何かわかる事がありましたら。教えてください。
>>343
消えないシートが涌くな・・・

Dim L As Long
Application.DisplayAlerts = False
For L = 1 To 100
 Workbooks("Book1").Sheets("Sheet3").Copy After:=Workbooks("Book2").Sheets(1)
 Workbooks("Book1").Sheets("Sheet3").Delete
 Workbooks("Book2").Sheets("Sheet3").Copy After:=Workbooks("Book1").Sheets(1)
 Workbooks("Book2").Sheets("Sheet3").Delete
Next L
Application.DisplayAlerts = True
345デフォルトの名無しさん:03/08/21 01:27
テキストボックスにファイルをドラッグアンドドロップすると、
そのファイルの絶対パスがテキストボックス上に表示される・・・・

という処理を行うには、どうすればいいのでしょうか??
VB6.0のイベントプロシジャにはText1_OLECompleteDrag()なんてのがあるけど、
VBAには無かったような・・・。
>>346
Windowハンドルも取得できないはずなので絶望的ですな。
348デフォルトの名無しさん:03/08/23 20:03
A列とB列とC列とD列に整数が並んでいます。
このとき C<A<Bとなり且つAとBの差が2以上になる場合(←Xとする)の
Dの整数÷(X) を出すプログラムを教えてください。
>>348が未定義の変数Xを参照しました
終了しますか? OK/Cancel
350デフォルトの名無しさん:03/08/23 23:53
VBAでIEを利用してダウンロードしたいのですが、
右クリック保存のコードがわりません。教えてくださいおながいします。


Set IE = CreateObject("InternetExplorer.application")
IE.ここがわからないでつ


>>348
プログラムを使わなくても出来そうだが、、、
352348:03/08/24 02:07
いろいろな場合に摘出したいってのと、こういう関係の式を
次々に研究したいと思うので、その大元になるプログラム
の書き方をぜひぜひ教えていただきたいなと思いました
If C < A And A <= B - 2 And X <> 0 Then Y = D / X
354デフォルトの名無しさん:03/08/26 00:07
age
>>348
で、X って何?
356デフォルトの名無しさん:03/08/29 12:24
マクロってどのスレで聞けばいいの?
357  :03/08/29 23:53
>>356
経済学板へどうぞ
358デフォルトの名無しさん:03/08/30 17:33
http://www.yannies.com/diy/excel_C005.htm
の最下段付近にある「サンプルプログラム」が作動しません。
インデックスが有効範囲にありませんと言われてしまいます。

http://www.yannies.com/diy/excel_C006.htm
http://www.yannies.com/diy/excel_C007.htm
のサンプルマクロに解説がないのでさっぱり意味がわかりません。
どなたか解説していただけないでしょうか
359 :03/08/30 17:57
>>358
Module1の"分析用ワークブック" を "分析用ワークブック.xls"に直したら
動いたが?

OS:XP
Excel:Excel2002
360デフォルトの名無しさん:03/08/30 19:26
質問です。

Excelのマクロを用いて、プリンタのドライバか何かが独自に持っている印刷機能の設定
を行うにはどの様にしたら良いのでしょうか。

例えば、富士通のとあるプリンタには「1up/2up/4up…」といった設定が有り、1つの紙
に複数のページを印刷する機能が有ります。それの設定を行いたいのです。

宜しくお願い致します。
>>360
専用のプリンタ設定作っといて、それで印刷かければ?
EXCELからは複数項の印刷だけどプリンタドライバ側で1枚にまとめる機能だろ?
VBAからそのドライバをいじるほぼ無理だろう。
たぶんそのドライバの設定がレジストリのどこかにあるだろうから
そいつを探し出して書き換えるぐらいしか方法は無い。

それができなければ複数枚印刷用のワークシートを作って、そいつを印刷すればいい。
配置と拡大率いじるだけだから簡単だ。
363360:03/08/30 23:50
>>361-362

どうもです。

それ良いですね。
Excelのファイル(ブック)って個々のシート毎にプリンタドライバの設定を保持
しているみたいですからね。

それを利用して予め1up/2up/4up…という設定のシートを作って置く…と。
印刷する時は印刷したいシートのデータを印刷専用シートにコピり印刷すると。

しかし、それだと個々の印刷したいシートにプリンタドライバの印刷設定を持た
せる事はやはり出来ないという事ですか…。

印刷したいシートに非表示の印刷情報(1up/2up/4up…)を持たせて置いて、印
刷専用のマクロでそれを読み取り、印刷専用シートにコピって印刷って事になり
ますか。

そうすると、印刷専用のマクロを知る人で無いとその印刷設定は利用出来ない訳
ですか。
でも、俺個人で利用するだけだから良いのか…。

納得しました。有り難う御座いました。
364こいやぁ!!!!:03/08/30 23:53
365デフォルトの名無しさん:03/08/31 00:14
>>360
APIでPRINTER_INFO_X構造体は調べれば何かヒントがあるかも。
特にDEVMODE構造体の拡張領域とか。
366デフォルトの名無しさん:03/08/31 00:16
どなたか、
マクロ実行後に"取り消し"を
できるようにする方法、教えてください。
Application.Undo
368363:03/08/31 10:24
今更気付きました。阿呆ですみません。

次の手順で行けば個々の印刷したいシートにプリンタドライバの印刷設定を持
たせられそうです。

1.印刷したいシートのデータを印刷専用シートにコピー。
2.其の印刷専用シートをシート丸ごとコピーして新規シートを作る。

2.で作成された新規シートには印刷専用シートのプリンタドライバの設定が
反映される事は確認済みです。
369デフォルトの名無しさん:03/08/31 15:24
自作の関数の引数にA1形式でセル番号やセル範囲を渡すことはできますか?

例えばSUM関数では、A1:A5のような指定でセルの範囲(や単独のセル)
を引数にできたりしますよね?
コピー&ペーストで、セル番号が相対参照で変化するようにしたいので、
こういった引数の渡し方を独自の関数で行いたいのですが、むりぽでしょうか?

As Stringで引数を渡したら、セル内の数式は
=MyFunction("A4")
みたいになってしまい、コピペ相対参照が使えなくなってしまうし・・・網駄目歩
どなたかおながいします。
As Range
371デフォルトの名無しさん:03/08/31 16:52
Applicationオブジェクトに
Applicationプロパティがあるのは何故だろう。
グローバルだから
373358:03/09/03 20:04
>>358です。
ご指摘のとおりやったところ作動しました。
ありがとうございます。
374デフォルトの名無しさん:03/09/05 21:06
gg
375デフォルトの名無しさん:03/09/06 00:33
フォームのテキストボックス内に数字を入力(手入力)すると、
その数字に連動して、通し番号を付けたワークシートの増減が出来るというのは可能でしょうか?

また、やはりテキストボックス内に数字を入力すると、
その数字に連動して、所定のワークシートの内の
所定の行数から(例えば5行目から)下方向に向かって一つ上の行の書式を継承した
行を入力した数字の数だけ挿入するというのは可能でしょうか?

フォーム自体は作成できますが、上記の処理方法を
どなたか宜しくお願いします。
>>375
イベント処理についてお勉強。
後は眺めてりゃどうにでもナルかと。
377デフォルトの名無しさん:03/09/07 17:06
マクロですべてFTPでアップロード
したいんですが、どうやったらいいんでしょうか?
378デフォルトの名無しさん:03/09/07 17:17
Net.FTP.UpLoad()
379デフォルトの名無しさん:03/09/07 18:26
>>378
ちなみに、どうやって使えばよろしいのでしょう。
380デフォルトの名無しさん:03/09/07 22:15
マクロでマクロを消すマクロを書きたいんですが
どうすればいいでしょう?
探したんですが見つからないのです。マグロなら消せるのですが。
>>380
うお!探してたんですよ!!マグロを消せるマクロ。
うpきぼんぬ。
>>380
とりあえずVBEとかその辺のにねぇのか?
マグロは築地か焼津かそのあたりのだろ!?
383デフォルトの名無しさん:03/09/13 11:23
SaveSetting,GetSettingはどのライブラリを参照すればよいのでしょうか?

デバッグ上で使用すると、

実行時エラー”438”
オブジェクトは、このプロパティまたはメソッドをサポートしていません。

とエラーメッセージが出てしまいます・・・・。

環境は、WindowsXP PRO、EXCEL2000のVBAです。
よろしくお願いします。
384デフォルトの名無しさん:03/09/14 19:58
マクロを使った後、元に戻すマクロってあるの
>>384
それm何がしたいのか?と言う問題になると思うんだが。
>>384
それm何がしたいのか?と言う問題になると思うんだが。
>>384
マクロの実行結果に対するUndoをしたいって言うこと?
マクロの実行前に対象シートを別に保存しておかないと駄目なような気がするんだけど
(気がするだけで実際Undoが出来るかどうかは知らん)。
>>384

http://www3.ocn.ne.jp/~nyama/otto/xlstip.htm
マクロのやり直し(2001/11/24)

> マクロを実行は基本的にやり直すことが出来ません。
> あとで、選んだセルが間違っていることに気づいてもどうにもならないのです。
> 「基本的な命令ばっかり使っているのになぜ??」と思います。
> ただし、ユーザーがやり直しを選択した場合に
> 実行するマクロを指定することは可能です。
389387:03/09/15 12:49
>>388
勉強になりました thx
390384:03/09/15 14:45
>>388
へぇそうなのか
391 :03/09/19 03:08
セルの真下のセルに何か文字列があればそのセルの下線は点線で
セルの真下に何もなければセルの下線を棒線にしたいのですが
教えてください

また、A1からIV65536の全てのセルに存在する文字を全角から半角にするには
どうすればいいのでしょうか?
>>391
WorkSheet_SelectionChange

If Len(Target.Value) <> 0 Then

StrConv()

キーワード的にはこんなもん
条件付き書式で済みそうな質問ばっかしだな、最近。
394sage:03/09/20 00:43
すいません、質問なんですが
ひとつのセルに文章と数字が代入されている文字を一緒に書き出せる
方法ってありませんか?

x=9
“今日はx月です”とかにしてxは自分で好きな数字をいれるとか、、、
>>394
"今日は" & x & "月です"
表示形式をユーザー定義にして
"今日は"0"日です"
とかにすれば楽だけど・・・
397sage:03/09/20 01:31
>>395
>>396
どうもありがとうございます!!
ヘルプ見ても書いてないようだし。
助かりました。
398デフォルトの名無しさん:03/09/20 09:30
すみません質問です。
Application.ScreenUpdating = Trueの時に
コード上でApplication.ScreenUpdating = Falseに設定してもTrueにならず、
イミディエイトペインでApplication.ScreenUpdatingをTrueにすると出来るのですが、
何か原因があるのでしょうか?
>コード上でApplication.ScreenUpdating = Falseに設定してもFalseにならず、
の間違いでした。

400デフォルトの名無しさん:03/09/20 10:11
>>398
Application.ScreenUpdating はマクロを終了すると自動的にTrueに戻される
ようだが。
それとも、
Application.ScreenUpdating = False
MsgBox Application.ScreenUpdating
のように、変更直後の値も False にならないのか?
設定できていないとどうやって判断したの?
複数のシートを持つブックの中で変更のあったシートだけCSV保存するマクロを考えています。
ブックに変更があったことは分かるのですが、各シートに変更があったかどうかはどのように
取得すれば良いでしょう?

これは難しいことなんですかね?VB厨の私に救いを...
ThisWorkbookのWorkbook_SheetChangeの引数shで変更のあったシートが分かる
そいつで変更されたかどうかのフラグを管理すれ
404398:03/09/20 10:39
>>400
そうです。
コード上で設定した直後でもScreenUpdatingの中身がTrueのままなのです。
405デフォルトの名無しさん:03/09/20 23:49
VBAで指定の列のセルが空白になるまで別の列の同じ行のセルを色を赤くするには
にはどうすればいいのでしょうか?
条件付き書式
>>405
指定の列を B列、色を変えたい列を C列とすると、

Dim i As Long
For i = 1 To Rows.Count
If Range("B" & i) = "" Then
Exit For
Else
Range("C" & i).Interior.Color = RGB(255, 0, 0)
End If
Next i
408デフォルトの名無しさん:03/09/22 00:31
同じ階層の指定したAccessのテーブルを
インポートする方法ってありますでしょうか?
409フォルトの名無しさ:03/09/22 13:01
***すれ立てるまでもない質問はここで 第43刷*** よりここに紹介されたので
そのまま質問させて頂きます。
#478----------------------------------------------
くそ馬鹿っぽい質問してよいですか。
初心者向けのEXCELファイルを作ってるのですが、
自分もVBAには疎すぎて、どうやったらいいかわからないんで...

Macroで、ユーザがファイルを終了するときにファイルを閉じる前に
特定のセルの値を名前として保存してから
終了する方法ってありますでしょうか。

もしなさげなら、ボタン(四角形など)を押すと、
特定のセルの値を名前にして保存して、終了する方法が
知りたいです。

でも、マジでVBA勉強せなあかんな...
Excel関数に強くなってVBAできねぇって鬱だ...
>>409
ActiveSheet の "A1" セルに拡張子なしのファイル名があるとする。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim fn As String
fn = ActiveSheet.Range("A1") & ".xls"
ThisWorkbook.SaveAs (fn)
End Sub
411フォルトの名無しさ(409):03/09/22 15:38
>>410
ありがとうございました。
やってみます。
>>411
Thisworkbook にコードを書くんだよ。
ねんのため。
413デフォルトの名無しさん:03/09/22 21:08
印刷ダイアログを表示させたのですが、
ここで部数を変更するのはどうやるのですか。
414デフォルトの名無しさん:03/09/22 22:08
>408
とりあえず、あるとだけ言ってみるテスト
Excel VBAでOpenGL呼び出したら変態でしょうか?
u
417デフォルトの名無しさん:03/09/23 04:40
今日初めてVBAをはじめたんですが、
Function を記述しても、関数が登録されません。
原因は何でしょうか?

Excel2000です

例えばこんな単純なものでも、ワークシートに反映されないのです

Function ReturnOne() As Integer
   ReturnOne = 1
End Function

VBEでこのように記述してから、ワークシートの任意のセルで
=ReturnOne
と入力しても、
#NAME?
と表示されます。
関数の一覧にも登録されていません。
宜しくお願いします
418デフォルトの名無しさん:03/09/23 04:47
めっっちゃくちゃ初心者なんですが、宜しくお願いします
VBEで Function を記述しても、ワークシートで関数として使用できません。
なにが原因か推測できる方アドヴァイスお願いします。

例えば、こんな単純なものも上手く行きません↓

Public Function ReturnOne() As Integer
 ReturnOne = 1
End Function

このようにVBEで記述して、ワークシートの任意のセルに
=ReturnOne()
と記入しエンターを押すと、
#NAME?
と表示されてしまいます。

深夜12時ごろから色々調べたのですが分からずこんな時間になってしまいました。
宜しくお願いします
419デフォルトの名無しさん:03/09/23 04:48
あ、投稿ミスしたと思って、マルチしてしまいました
すいません・・・
420デフォルトの名無しさん:03/09/23 05:24
あ、分かりました。

module っていうところに記述しないとだめなんですね・・・

打つ出し脳
421デフォルトの名無しさん:03/09/24 22:33
ブック内の全シートに対して一斉に
ボタンを押せば、マクロを反映させるコードって何でしょうか?
教えてください
>>421
ウイルスを作るのですね?
423デフォルトの名無しさん:03/09/24 23:07
>>421
ブック内にある
すべてのシートで1と入ってるセルを
全て文字を赤色にしたいのですが
>>423
また「条件付き書式」と言われるのが落ちのような気がします。

Dim Sheet as Worksheet

For Each sheet in ThisWorkbook.Sheets
'hogehoge
next
続きは折れだったらこうだな。

Sub hogehoge(sh As Worksheet)
Dim rng As Range

For Each rng In sh.UsedRange
If rng.Value = 1 Then
rng.FormatConditions.Delete
rng.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="1"
rng.FormatConditions(1).Font.ColorIndex = 3
End If
Next
End Sub
426デフォルトの名無しさん:03/09/26 22:38
Excelを開かずに中のVBAを削除することって可能でしょうか?
>>426
さっさとウイルスバスター買ってこいと。
428デフォルトの名無しさん:03/10/01 14:05
「Docomentメソッドは失敗しました。 Twebbrowser2オブジェクト」とかってエラーが偶に出ます。

 Do While 1
Set objIE = CreateObject("InternetExplorer.application")
  Do While objIE.Busy = True
DoEvents
Loop 
For Each objTAG In objIE.Document.body.all
'処理
Next
Sleep()
Loop

コードはこんな感じなんですけど、For Each文のところで偶にエラーになります。
失敗するときは、objTAG変数が Nothingになってます。
うまくいくときは、Objectになってます。
頻度は、不規則ですが強いて言えばループ20-30回に1回くらいです。

windows2000+sp2のexecel2000なんですけど、環境とかの影響でしょうか?
何かご存知の方、お教えお願いします。

ウオッチ式で objIEを見て見ましたが、それらしいのが見つかりませんでした。


429デフォルトの名無しさん:03/10/01 20:31
Excelに限ったことではないのですが、
変数を変数で宣言するというのは可能でしょうか?

例えばセルA1からA3に2,8,9という数字が入ってるとして
これを変数a2,a8,a9と定義したいのです。
配列を使わずに。
Dim "a" & Cells(i,1)
こんな感じで。
>>429
斬新な発想ですなw
連想配列に近い発想だな。
>>429
Evalとか無いんかね?

取りあえずコレクションで良いんじゃないの?
と思ったので>>431に一票。
>428
ウチは何も考えずにWhile条件に
Or objIE.readyState <> 4を追加してるな。おまじない程度に。
それと、それってフレームをナビゲートする時エラーにならんかい?
連想配列ならDictionaryオブジェクトか。
>>434
内部の実装なんてなんでもいいよ。
436428:03/10/02 17:29
>>433
レス、ありがとう。

おまじない真似させていただます。
フレーム無しでしか試してないですけど、エラーになるかも。

もし他にも情報がありましたら、よろしくお願いします。


437デフォルトの名無しさん:03/10/04 19:32
すいません、教えてください。

仕事で2000のVBAをデータベース関連で
使っている者ですが、今度出る2003は、
買い換える程の機能向上・追加はあるのでしょうか?
438デフォルトの名無しさん:03/10/05 04:43
無い
VBAのコードをThisworkbookの所に書くのと
標準モジュールを追加してそこに書くのと
それぞれのシートの所に書くのとどんな違いがあるんでしょうか?
>>439
スコープ
>>440
ヲイヲイ...
>>439
そんな質問してるうちは気にしなくていい気がする。
そのうち分かりますヨ。お勉強ガンバッテ
>>441
情報量0ですね。
443429:03/10/08 20:47
連想配列ですか。。。
初耳なので調べてみたのですが、どうやら近そうです。
が、今の環境じゃ使えないっぽいです。
ありがとうございました。

で、新たな質問なのですが、
定数にセルの値を参照するのは可能でしょうか?
Const hoge as Long = Cells(1,1)
の様な感じで。
上のだと「定数式が必要です」というメッセージがでるんです。
>>442
情報量0ですね。
445デフォルトの名無しさん:03/10/08 20:56
429は試す前に質問しちゃ駄目だよ。
しても悪くは無いが、力つかんよ。
446デフォルトの名無しさん:03/10/08 20:58
>定数にセルの値を参照するのは可能でしょうか?
1.定数に...
2....参照するの...

激しくDQN
「一旦初期値を与えると以後は変更不可能な変数」が欲しいということね
>>447
final?
>429
>が、今の環境じゃ使えないっぽいです。
少なくともexcel2000なら↓みたくできるぞ

Sub hoge()
Dim d, a

Set d = CreateObject("Scripting.Dictionary")
d.Add 2, "a"
d.Add 8, "b"
d.Add 9, "c"
a = d.items

Dim i As Integer
For i = 0 To d.Count - 1
Debug.Print a(i)
Next
End Sub
……と思ったらexcelに限らないのね。
何言語だろう?
451デフォルトの名無しさん:03/10/09 23:20
例えばシート1でVBAマクロを実行すれば
そのシートだけでVBAマクロが実行されますが

シート1であるVBAマクロを実行するとシート1、シート2、シート3…とそのブックの中ににある
すべてのシートにVBAマクロを適用させるにはどうすればいいのでしょうか?

具体的には
100個あるシートの中のセルを全てまとめて左寄せしたいのですが
一回一回シートごとにやってられないし

教えてください
>>451
for-nextでworksheets(n)ではダメなの?
453デフォルトの名無しさん:03/10/10 00:32
>>452
すいません
教えてください

そんな書き方あるんでしょうか?
>>452
for eachの方が良くないか?
>>451
マクロなんて不要。

全シート選択状態で、CTRL+Aしてから、左寄せ。
>>455
一生寄せてな(藁
>>455
というよりも
彼は左寄せがしたいんじゃなく
ある動作を全シートに反映させることがしたいんだろ
>>453
for-next を使うなら

Dim i As Long
For i=1 to Sheets.Count
Sheets(i).〜 処理
Next i

>>458
いてれーたを知らないんですね。
>>457
いや、彼の文章からは「具体的に」全セルを左寄せ、としか読めないが。

つまりは、スレ違い(と言うより、板違い)だな。
>>460
お前も邪魔。VBAの話をしよう。
462デフォルトの名無しさん:03/10/12 01:49
セルに
aa1111
bbbbbb2
c3
d
e5555555555
というように後ろの数字が並んでいる時に
その数字の部分を消去してそれぞれaa、bbbbbb、c、dのようにするにはどうすればいいのでしょうか?
>>462
答えそのまんまいってるじゃん(w
あとは"aaa111bbb22"=>"aaa111bbb"に気をつけるだけ
464デフォルトの名無しさん:03/10/12 15:51
>>463
意味がわからんです
10000ぐらいの処理数で後ろの数字はあるときもあればないときもある

japan3333→japan
japan→japan
japan1000000000000000→japan

みたいにこれが10000ぐらい続くのを一括して後ろの数字を削除
>>463 様は
aaa111bbb22 のように
数字が文字の間にある場合に注意せよと
おっしゃっておられるのぢゃ。
aaabbb ではなく、aaa111bbb にするのね。


文字列を後ろからMIDで一文字調べる
文字が数字なら一文字前の文字を調べる
文字が数字でないならその位置でLEFT
>>466
効率悪いんだよなぁ・・・
>>467
もっと効率のいいやり方が存在するのか?
正規表現も使えないもんな。不便すぎる。

効率悪くても手で一つ一つ直していく事を考えれば楽じゃん。ワークシートが
2つあればExcelを2個立ち上げればいいだけの話だし。ページの切り替えも
もちろんVBAにやらせる。
>>470
ああ、がんばってくれ。
式+マクロで後ろの一文字づつ消してけば?
473デフォルトの名無しさん:03/10/13 01:43
>>462 件数わかっているみたいからforループにしてある。

Sub 文字数字分離()
For i = 1 To 10000
調査文字 = Cells(i, 1)
y = Len(調査文字)
For j = 1 To y
z = Mid(調査文字, j, 1)
If z = "1" Or z = "2" Or z = "3" Or z = "4" Or z = "5" Or _
z = "6" Or z = "7" Or z = "8" Or z = "9" Or z = "0" Then
s = Mid(調査文字, 1, j - 1)
Exit For
End If
Next j
Cells(i, 2) = s
Next i
End Sub
474デフォルトの名無しさん:03/10/13 02:20
>>473の4行目と5行目の間にこれを挿入。

s = 調査文字

なお、462、464に提示のように、左から文字→数字の条件による。
475情報量0と言われた男:03/10/13 03:06
>>474
数字のみだった場合用ですか..?

>>473
If z= ........ ="0" Then のところを
Asciiコードで囲ってしまったほうが若干スマートに見えるかも?です。

あいかわらず情報量0です。スミマセヌ
476 :03/10/13 03:34
VBの文字列操作関数って、VBAでもつかえますか?
>>476
使える
>>469
Excelで使えないって言ってるの?
VBScript RegExpオブジェクトを使えばできるだろ?
http://www.microsoft.com/japan/msdn/columns/scripting/scripting051099.asp
>>478
結局外のいつ導入されたか解らないライブラリを使うハメになってしまうと言うことだ。
480デフォルトの名無しさん:03/10/13 09:29
>>475
>数字のみだった場合用ですか..?

意味不明。
とにかく、462や464に出ているようなテータはきちんと処理できる。
>>480
汎用性がない。使い捨てのクソコードだと言いたい。
>>480
IFの条件式が間違っているってこと
NOTで反転させとかないと
あと文字の頭からチェックしてるのは465の例でおかしくなる


Function CutRightNum(ByVal str As String) As String
 For j = Len(str) To 1 Step -1
  z = Asc(Mid(str, j, 1))
  Select Case z
  Case 48 To 57
  Case Else
   CutRightNum = Left(str, j)
   Exit Function
  End Select
  Next j
 CutRightNum = str
End Function
483デフォルトの名無しさん:03/10/13 11:23
>>474 >>475 >>482
一人が書きだすと文句つれでやりだすんだよな。
とれもクソコードだけどw
484473:03/10/13 12:09
>>482
おおっ。目から鱗。
どうもです。

なお、Ifの条件は左から数字に当たるまで探すという問い合わせ方法なので、NOTではないです。
485476:03/10/13 13:10
>>477
使えるんですね。どうもありがとうございました。
486こっちも頼む:03/10/16 20:16
こっちのスレ(VBAエキスパートについて)もよろしく
http://school2.2ch.net/test/read.cgi/lic/1066275292/l50
すみません。かなり悩んでます。
環境はExcel2000 Win2kです。

置換(Replace関数)を行う際に
書式設定は文字列であるセルに対して
"3-10"
"3-10 "
と2つの値があった時にスペース詰めを行うと

"3-10" → "3-10" 書式設定は文字列のまま
"3-10 " → "3月10日" 書式設定が日付に変更される

と書式設定が日付に自動的に変更されてしまいます。
書式設定を文字列にしたまま変換したいのですが何か良い方法が
あったら教えて下さいませ;
関数は以下のような記述になっています。

Columns("A:A").Select
Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
488487:03/10/18 20:24
解決しました><
>>487
できれば解決法を教えていただければ...
490 :03/10/18 22:39
なんだかがっかり。
コードで言い表さなくても、自分のことばでどういう処理で解決したのかを伝えて欲しかったな。
492デフォルトの名無しさん:03/10/20 03:14
ExcelVBAでCreateThreadしてマルチスレッドをやってみました。
ところがAddressOfで与えた関数内で,ユーザフォームのオブジェクトや
各シートのプロパティを操作したところExcelが静かに墜落しました。

VBAではマルチスレッドは使えないのでしょうか?
>>492
セマフォ、ミューテックス。
494あにゃな:03/10/20 03:58
Excelが分かると便利ですね。

私はExcel97しか持ってませんが、今のとVBAの機能はだいぶ違いますか?
>>492
VBのレベルで対応してなかったかと。
VBでつかえるAPIはデキセルでもつかえるのかっと
497492:03/10/20 22:28
>>493
なるほど,オブジェクトへのアクセス権が無いということで墜落しているわけですか

>>495
VBでCreateThreadしているサンプルが,
国内・海外ともに少数ありましたので,てっきり使えるのかと。
なかなか難しいものですね。
そもそもの動機は,DoEventsを発行して,
スレッドで動かない各コントロールを更新させるのは,
ちょっとありきたりだよなぁ 程度のものでしたが,動かないと悔しいものです。
498デフォルトの名無しさん:03/10/26 17:29
フォームを作成して、SVGコントロール(=ADOBEのSVGビューアのコントロール)を貼り付けた。

このコントロールのSRCにSGVファイル名を指定すると、ちゃんと表示された。
でも、getSVGDocumentを実行すると、エラーになる。
なぜだと思う?? 教えてほしいのさ。
EXCEL でフォームが使われてるとムカツキます。
なんかEXCELの良さ半減と言った感じがして・・・。
500デフォルトの名無しさん:03/10/27 00:43
おれは、フォームは、ダブルクリックするまでは影に隠れているような作りかたをするけどね。
そのほうが職場でも好評だけど。
501デフォルトの名無しさん:03/11/02 19:36
A列に入ってる数字が偶数だったら、文字の色を青くするコードを書いてみてください
>>502
いやだ。
503デフォルトの名無しさん:03/11/02 22:43
教えてください。
DATE関数で2003-11-02をとり20031102に編集するには
どうしたらいいですか?
素人なのでよろしくお願いします。
>>501
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 1 Then
 Select Case Target.Value
  Case 0, 2, 4, 6, 8
   MsgBox "偶数入力しやがりましたので、フォントを青色に設定しやがれ( ゚Д゚)ゴルァ!!"
  End Select
End If
End Sub

偶数の判定は途中までしか記入していないので必要なだけあなたがすべて記入しておいてください。
あ、あと負数もあるんでよろすこ。
>>503
Format(dtDate , "YYYYMMDD")
506デフォルトの名無しさん:03/11/02 23:25
>>505
Format(dtDate , "YYYYMMDD")
これだけでは構文エラーになってしまいます。
何が不足しているのでしょうか?
507デフォルトの名無しさん:03/11/02 23:51
>>504

ありがと〜
>>506
Dim strDate as Date '日付型 DATE関数で取り込んだ日時のいれもの
Dim strDate as string '日付型から変換した文字列型のいれもの
strDate=Format(dtDate, "YYYYMMDD") ’日付型を文字列に変換

Formatは指定した書式の文字列に変換する関数なので
その文字列を格納するか即使用する必要があります。
>>507
本気でいいのか?
510デフォルトの名無しさん:03/11/03 00:07
>>508
ありがとうございます。
非常によくわかりました。
>>504
このほうが楽だよ。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
   MsgBox "A列の数字が偶数なら、文字の色を青色に設定しやがれ( ゚Д゚)ゴルァ!!"
End Sub
512デフォルトの名無しさん:03/11/03 17:53
エクセル97で
入力規則のリストを使って入力した場合
worksheet_change イベントは発生しないのですか?
>>512
するけど?
514デフォルトの名無しさん:03/11/03 22:39
>>512
リストの値を範囲または、範囲名で取得している場合はダメみたいだね。
515デフォルトの名無しさん:03/11/05 18:56
永久ループの中でエラーチェックを行っているのですが、
エラーをmsgboxで表示させても、目立たすに困っています。

ググッてみたら、HWND_TOPMOSTとかウィンドウとかの事例は
出てきましたが、よく分かりませんでした。

msgboxを手間に表示させる方法をご存知の方、
ご教示いただけないでしょうか?

よろしくお願い致します。 _| ̄|○
>>515
一度だけで手前でいいならMsgBox表示前にEXCELごと手前にしてしまうのは

Public Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long

Private Sub ExcelForeground()
 Dim hwnd as long
 hwnd = FindWindow("XLMAIN", vbNullString)
 'EXCELのウインドウハンドル取得
 SetForegroundWindow (hwnd)
 'EXCELを最前面にする
End Sub

517515:03/11/05 23:17
>>516
こんなに早く、ソースまで付けてもらってビクーリです。

早速試してみます。一寸図々しいですが、他にもアイデアありましたら
よろしくお願い致します。

どうも有難うございました。
518 :03/11/08 09:13
Excel2002ですが、ひとつ教えてください。ユーザーフォームのボタンはボタンの色を変えられるけど
シートに貼り付ける方のボタンありますよね。あれって背景の色を変えることって出来ないんですか?
プロパティ見てもそのようなのが無いみたいだけど、シートと同じ色なんで他の色に変えて判りやすく
したいなぁと思ってるんですが。
コントロールツールボックスのじゃダメ?
>>519
このボックスの奴もプロパティでパターンが無いですよね?うーん、そのボタンを置いてるセルの辺りの
色をつけて置いたほうが良いみたいな?

ちなみにコントロールツールボックスは初めて知りました(^^;。情報有難うございます。
521519:03/11/08 23:11
XP+xl2002のみの確認だけどBackStyleプロパティ無いでしょうか?
背景色を変えたいというのでOptionButtonだと思うのでが違うのでしょうか?

あと、私の認識ではフォームのほうのコントロール類はxl95時代の名残なんで
VBA使うのだったらコントロールツールボックスを使用する方が
ユーザーフォームから移行する際等に楽だと思います。
522518:03/11/08 23:34
>>521
こりゃまた失礼。BackStyleプロパティを確認させていただきました。これでOKです。
先程も言ったように初めてこの存在を知ったものでして、これからはコントロールツー
ルボックスのほうを利用するようにします。

 有難うございました。
523デフォルトの名無しさん:03/11/09 02:43
すいません、ちょっと悩んでおります。
仕事でブックに大量のシートを作成して使用しているので、
ユーザーフォームにコンボボックスを貼り付けてシート一覧を表示させ
簡単にシートを選択できるアドインを作りました。

今回より便利にするためにツールバーにこの機能を実装しようと
もくろんだのですが、早速詰まってしまいました。

1.ツールバー上にコンボボックスを作ってもオブジェクト名
がわからないので、リストに追加できない。
2.ブックを切り替えたときにリストの更新を行いたいが
ブックに切り替えが行われたときのイベントの捕まえ方がわからない。

以上の2点なのですが、どうかご教授宜しくお願い致します。
>>523
ためしに作ってみた
なにげに便利そうなのでそのまま組み込んだ(゚д゚)ウマー

1.
Public Sub UpdateList()
 Dim cbcbx As CommandBarComboBox
 Set cbcbx = CommandBars(strCommandbarName).Controls(strComboboxCaption)
 cbcbx.Clear
 For Each sh As Activeworkbook.Worksheets
  cbcbx.AddItem sh.Name
 Next sh
End Sub

2.クラスを作って捕まえる
Private WithEvents xls As Excel.Application
Private Sub Class_Initialize()
 Set xls = Application
End Sub
Private Sub xls_WorkbookActivate(ByVal Wb As Excel.Workbook)
 UpdateList
End Sub
525デフォルトの名無しさん:03/11/10 16:02
Excelをブラウザみたいに使うことできないですかね?
具体的には
ブラウザのフォーム送信がありますよね、
これをExcelのセルに入力されたデータをボタンを押して送信するような形です。
>>525
できるよ
>>526 あんた、すごいよ。カッコイイぜ。
俺にはいまだに >>525 の日本語が理解できない
528526:03/11/10 18:37
>>527
ん?
セルの内容をURLパラメータで渡して戻ってくるHTMLをシートに表示したいってことじゃないの?
POSTを使いたいってこと?
529526:03/11/10 18:41
>>525
もし>>528の内容をやりたいんだったら、
1. マクロ記録を開始
2. Webクエリを実行(これがわからなければヘルプ参照)
3. マクロ記録を終了
4. 記録されたマクロをF1を駆使して改造
で何とかなると思うぞ。キーワードは"Webクエリ"だ。Get MethodだったらこれでOK。
530527:03/11/10 18:51
>>529 Excelって便利ですね♪←全然分かってない
>>525 データ送信のみだったらこれも使えるのか?ググったらこんなのが...
ttp://www.pstruh.cz/tips/detpg_post-binary-data-url.htm
あまりスマートには見えないけど...
531デフォルトの名無しさん:03/11/11 14:33
確認Msgなどを表示することなしに上書き保存したいのですがどうすればいいでしょうか?
てっきりSaveやSaveAsメソッドに引数等で指定できる思っていたのですが
どうも無いようなので困っています。
そこで以下のコードを書いてみました。
strPath="C:\test.xls"
xlsApp.Workbooks.Add (strPath)
〜ワークブックを編集〜
Kill strPath
xlsApp.Workbooks(1).SaveAs (strPath)
上記のコードで一応動いたっぽいのですが
Kill strPathの行でなぜリアルタイムで開いているBookを消すことが
可能なのかわかりません。
そもそも上記のコードは確認無し、上書き保存として間違えてませんでしょうか?
宜しくお願いします。
532527:03/11/11 14:58
Application.DisplayAlertsで検索
533531:03/11/11 15:34
>>532
ありがとうございます。
無事解決しました。
DisplayAlertsって警告メッセージを抑止するんだから
保存の際の確認メッセージを止めることはできない、と
勝手に思い込み試すこともしていませんでした。
助かりました.
534527:03/11/11 15:44
補足(?):
>>531さんは分かってるかも知れんけど、
>>531のコードは既存のファイルを消して新規保存するから
当然の如く確認メッセージは出ない、という事だと。


以上、オンヌーですた
535531:03/11/11 16:56
>>534
補足ありがとうございます。
上でも振れましたが
strPath="C:\test.xls"
xlsApp.Workbooks.Add (strPath)
〜ワークブックを編集〜
Kill strPath//←
xlsApp.Workbooks(1).SaveAs (strPath)
なぜ矢印部分で消せるのでしょうか。
普通にワークブックをダブルクリックして開いている状態で
オープンされているファイルは普通消せませんよね?
なぜkillだと消せるのでしょうか?
これはこれで気になります。。
(0)規制解除....ふぅ。

.Addメソッドは「新規作成」です。
このコードだと「"C:\text.xls"をテンプレとして新しいブックを作成」です。
通常の開くは.Openメソッドを使ってください。

...そろそろボロが出そうなので逃げます
537デフォルトの名無しさん:03/11/12 01:43
達人の皆さん教えて下さい!!
excelの関数で、
もしXが30%未満なら、X=10%
もしXが30%以上50%未満なら、X=40%
もしxが50%以上なら、X=80%
という、IF関数を作りたいのですが、上手く行きません。

版違いでしたら、ごめんなさい。
ソフトに詳しい方がいらしたら、ご教授下さい。
急いでいますが、焦ってしまい、自力ではお手上げです。。。


>>537
A列に対象の数値が小数で入っているとする。
B列に判定結果を書込むとする。
下記を B1 セルに書いて、B列にコピーする。

=IF(A1<0.3, 0.1, (IF(A1<0.5, 0.4, 0.8)))
539531:03/11/12 08:53
>>536
すこぶる納得できました。
ありがとうございます。
540hama- ◆DSCCo.c9U6 :03/11/12 09:28
偽スレで質問してしまっていたのですが
もう一度質問です。
VBでブラウザを作っているのですが、
IEのお気に入りの参照の仕方を教えていただけませんか。
お願いしますm(_ _)m
541hama- ◆DSCCo.c9U6 :03/11/12 09:33
すみません。
スレ間違えました。
申し訳ありませんでした。
B1:VLOOKUPで参照するセル(このセルを書き換えて印刷を繰り返したい)
C11:印刷開始ページを入れたセル
C12:印刷終了ページを入れたセル

Sub auto_print()
Dim current_data As Integer
Dim start_page As Integer
Dim end_page As Integer

start_page = Range("C11").Value
end_page = Range("C12").Value
current_data = start_page
Range("B1").Value = start_page

Do While current_data <= end_page
ActiveSheet.PrintOut
current_data = current_data + 1
Range("B1").Value = current_data
Loop

End Sub

※LOOPはしてB1のセルは書き換えられるんだけど印刷してくれまへん。
教えてください。よろしくお願いしますm(_ _)m
excel97です
543542:03/11/12 17:20
解決しました。
印刷ページを指定してるセルが一個ずれてただけでした。
お騒がせしました。
544 :03/11/20 17:39
保守
前スレで少し紹介されていたのだけど、

Housaka's Home Page
http://homepage2.nifty.com/housaka/

このページ、すごく役に立ちました。
ふだん別の言語を使っているプログラマが、急にVBAの仕事を
しなければならなくなった、といった場合に最適だと思う。

特にここ。
http://homepage2.nifty.com/housaka/excel/vbafaq00.html


ついでですが、本当に何も知らないうちは、ここが役立ちました。

BIGLOBE SoftPlaza VBA入門_index
http://softplaza.biglobe.ne.jp/text/1999sp/vba/vba1_index.htm
一応ここも付けておいて

VBA研究所
http://www.vbalab.net/

※ここのサイトの管理人さんはマルチポストOKの立場みたいだけど、通常はヤメレ。
>>545
掲示板見たらnif臭ぷんぷんでワラタよ。
ここもすごく役に立った。

VisuaBasic & Excel 活用研究
http://homepage2.nifty.com/kasayan/vbindex.htm

Excelのオブジェクトモデルは、俺には非常にとっつきにくかった。
DOMとかと比べると、呼び出し方が非常に多様で、直観的でないルールが多い。
基本的にはApplication, WorkBook, WorkSheet, Range しかないんだが、
このページを見るまでそれを理解できんかった。
質問です。

PasteSpecial Paste:=xlFormats と同等の機能で、クリップボードを経由しない
メソッドはありますか?

やりたいことは、取り込んだCSVファイルに整形するために、あらかじめ
用意してあるテンプレート用のシートにあるセルの書式を複写することです。

Copy Destination:= では 書式だけを複写することができないようなので。

ちなみにCSVファイルの大きさは不定で、その大きさに応じてセルの複写を
繰り返します。
訂正です。
× 取り込んだCSVファイルに整形
○ 取り込んだCSVファイルを整形

あと、クリップボードをクリアする命令はVBAにはありますか?

クリップボードに大きなデータが残っていると、Excel終了のときにいちいち確認
画面が出るので、VBAでクリアしておきたいのです。

現在は、画面の隅の1セルを選択、コピーしてお茶を濁していますが。
>>550
>クリップボードに大きなデータが残っていると、Excel終了のときにいちいち確認

Application.DisplayAlert = false
>>551
ありがとうございます。

サブルーチンの末尾に
Application.DisplayAlerts = False
と書いてみましたが、なぜかExcel終了時のアラートが消えません。

検索すると、
http://homepage2.nifty.com/housaka/excel/vbafaq01.html

Application.CutCopyMode = False
という設定を見つけました。
範囲選択モードを解除するものだそうです。

これを設定したらうまくいきました。
何故か DisplayAlerts がなくても、アラートが出なくなりました。
うまくいったけど、よく分からない…。
ちょっと教えていただきたいのですが

A B C D E
1 x x x z x
2 x x x z x
3 x x x x x
4 x x x z x
5
6

上記のような表でDのセルにzと記入されている場合にのみ
Aのセルを青色に塗りつぶしたい(上の表の場合は1,2,4)のですが、
何も記入していないセル(5,6・・)にも色がついてしまいます。
無記入のセルには設定を反映させないようにしたいのですが
どうやったらいいのでしょうか?
>>553
どんなコードを書いたの?
>>554
範囲指定がRange("A5:A65536").Selectとなっているので
全部塗りつぶしされます。
記入してあるセルまでの範囲を指定したいのですが
このような場合にはどうやったらいいでしょうか。
>>555
情報を小出しにするな。
思い込みで発言するな。
該当個所のソースを示せ。

まぁ、それ以前に、VBA使う必要なさそうだけどな。
557デフォルトの名無しさん:03/11/25 21:49
あのー激しくガイシュツだと思うんですが
XPで作ったマクロを98で動かそうとしたらエラーがでました。
なぜなんですか?98では動かせないんですか?
>>557
どうやって動かそうとしたの?
コピペで動かそうとして動かないんなら、
・そのマクロは汎用的ではなくもとのBookの構造などに依存しているため動かない
・XPで拡張・変更された機能を使っている
のどっちかだと思う。
簡単なマクロなら、基本的にExcel5以降で互換性あるとおもうよ。
>>557
エラーが出たときは
どんなコードを実行しようとしているときに
どんなエラーが出たのか具体的に書かないと
正確に答えられない。
560557:03/11/26 01:01
Range("A4:Q65536").Sort Key1:=Range("B5"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin, DataOption1:=xlSortNormal

特にコードを書いたとかではなく、
「新しいマクロの記録」を使って、ボタンをクリックするとB列が決められた順にソートされる機能を作りました。
これがXPだと動くのですが98だと動きません。
どんなエラーがでたのかはわかりませんが、(98は会社のPCの為、今確認できません)
デバッグを実行すると一番最後の「xlSortNormal」のところが黄色くなります。
これでわかりますでしょうか?
あともしよろしければ、エクセルの一番左(A列)にNoを入れているのですが
B列をソートしたときに同時にA列の番号もソートできるようにしたいのですがどのようにしたらよろしいでしょうか?
もしよろしければコードをお願いします。
初めまして。
ttp://www.atmarkit.co.jp/fwin2k/win2ktips/301mailist/mailist.html
上記のページを参考にしてexcel上からメールを一斉に配信できるようにしたいと思っております。
ところが「コントロールツールボックス」から「コマンドボタン」をクリックして
シート上でクリックした際に「オブジェクトを挿入できません」と言ったエラーが。

原因は何が考えられるでしょうか?
サンプルのファイルも配信ボタンを押しても配信できません。
>>557
あほか。ヘルプぐらい見ろ。そもそもマクロを使う必要があるのか?
つーかまず、98とかじゃなくてexcelのバージョンな。関係あるのは。
で、なんでその古いバージョンでマクロを記録させないのかと。

一応調べてみた。xl2000だとDataOptionの引数は無い。xlSortNormalは規定の値なので
記述する必要は無いかと。

>B列をソートしたときに同時にA列の番号もソートできるようにしたいのですが
>どのようにしたらよろしいでしょうか?

はい、意味分からん。
1.B列の値が同じだった場合、A列を基準に並び替える
   →Key2:=Range"A5"....つーかExcelの勉強しろ。
2.A列はB列以降の並び替えの結果に関係なく、別口で並び替える
   →Range("B4:Q65536").SortとRange("A4:A65536")...つーかExcelの勉強しろ。
3.A列は放置
   →Range("B4:Q65536").Sort.......つーかExcelの勉強しろ。
4.その他
   →ごめん。分からん。分かりやすく書いてくれ。

以上、なんかVBAとか関係ないし。
余計なお世話かもしれんが、本当にVBA使う必要があるのか、もう一度よーく考えてください。
563 :03/11/26 17:31
UserformのframeにOptionButtonを1〜5まで作りOptionButton3を
初期値にする為に
UserForm_Initialize()で
OptionButton3=Trueとしたんですが、

Sub test()

UserForm1.Show

If UserForm1.OptionButton1 = True Then
MsgBox "Option1 Click"
End If
If UserForm1.OptionButton2 = True Then
MsgBox "Option2 Click"
End If
If UserForm1.OptionButton3 = True Then
MsgBox "Option3 Click"
End If
If UserForm1.OptionButton4 = True Then
MsgBox "Option4 Click"
End If
If UserForm1.OptionButton5 = True Then
MsgBox "Option5 Click"
End If

End Sub
としたところ、OptionButton3のみしか選択できない状況です。
どこを修正しないといけないのか教えてください。
(Userform1のコマンドボタンではUnload Meだけ記述しています。)
>563
Unload Meが間違い
565563:03/11/26 18:49
>>564

う〜んと、ではUserform1を消して次のステップに行くにはどうすりゃ良いんでしょうか?
566563:03/11/26 18:52
>>564
すんません。Unload Meを Userform1.Hideに変更してみたら大丈夫でした。サンキュー
567561:03/11/26 23:32
その後いろいろ検索して試してみましたが駄目でした。
新規にEXCELを作って「コントロール ツールボックス」からクリックしても
「オブジェクトを挿入できません」のエラーが?
何かインストールしないと駄目なんでしょうか?
officeXPを使っております。
568フカフカホッコリ:03/11/27 11:09
Form上に設置したTextBoxに対して、右クリックでサブメニュー(コピーやペーストなどの)って出せますか?
569デフォルトの名無しさん :03/11/27 19:03
シート1のA2に入力した文字で
シート2のA1〜A500のデータをあいまい検索したいのですが、
方法を教えてください。
御願いします。
>>561
セキュリティーレベルとか
サンプルファイルに必要情報を追加してないとか

>>568
自作コマンドバーとOnAction

>>569
EXCELにあいまい検索なんてあったか?
571569:03/11/28 09:46
>>570
氏名のリストがシート2にあって
その中から山田さんだけとか川のつく人だけとかを
シート1のセルに入力した文字で検索してシート1に
貼り付けたいんですが・・・・

実は全然VBA解らないのですが
(関数は何とかできる)本を見て考えて、オートフィルターを
記録してみたのですが、

Selection.AutoFilter Field:=2, Criteria1:="=*山*", Operator:=xlAnd

Selection.AutoFilter Field:=2, Criteria1:="=*Sheets("シート1").Range("A1")*", Operator:=xlAnd
としてみたものの、動きません。
*をとると一応動くのですが、あいまい検索になりません。
どうしたら良いのか教えて下さい。
572デフォルトの名無しさん:03/11/28 10:06
シートのD列から一致するものを探し、あればその列を検索結果シートに
貼り付けるもの。Targetをフォームのテキストボックスから入れてます。私はこれで部分一致したデータの検索に使ってます。
Dim ws2 As Worksheet
Dim r1 As Range
Dim R1Pos$
If Target <> "" Then
Set ws2 = ActiveWorkbook.Worksheets("検索結果") '貼付先シート
'完全一致でシートの頭から検索(D列)
With ws1.Columns("D")
'D1セルがヒットする場合に最後になるのでちょっと工夫(After)。
Set r1 = .Find(What:=Target, _
LookAt:=xlPart, _
After:=.Cells(.Cells.Count))
If r1 Is Nothing Then
Worksheets("sheet1").Activate
Else
'最初に見つかったセル
R1Pos$ = r1.Address
Do
RR = RR + 1
'行コピペ
r1.EntireRow.Copy Destination:=ws2.Cells(RR, 1)
ws2.Cells(RR, 6) = wsname
'連続検索はFindNext
Set r1 = .FindNext(r1)
Loop While r1.Address <> R1Pos$
Set r1 = Nothing
End If
End With
Set ws1 = Nothing: Set ws2 = Nothing
End If
>>572
RRはどこで宣言してるんだ?
wsnameもいきなり出てくるぞ。
574572:03/11/28 11:01
Public RR As Long
Public wsname As String

です。
>>574
なんでRRをPublicにするんだよ。
プロシージャレベルにするのが常識。
576572:03/11/28 11:08
>>575
だったらそっちで適当に変えろ

577569:03/11/28 13:00
>>572
教えてくれてありがとうございます。
今見ただけでは全然解らないのですが(スマソ)
本片手に解読してみます。
ありがとうございました。

>>573
何を言ってるのか全然解りません。
ごめんなさい。
私は全然VBA素人なので、>>572さんに教えてもらったの
で頑張ってみます。
578572:03/11/28 13:32
>>577
×あればその列を検索結果シートに
○あればその行を検索結果シートに

でした。
>>571
Selection.AutoFilter _
Field:=2, Criteria1:="=*" & Sheets("シート1").Range("A1").Value & "*"
でやってみ。
580デフォルトの名無しさん:03/11/30 16:02
ちとカコ悪いけど、ループとLike演算子を使った方が汎用的だし
確実だし結局は早いと思うぞ。

Dim r as Range
For Each r In Sheets("シート2").Range(D1:D100)
If (r.valu Like "*山*") = True Then
Sheets("シート1").Range("A1").value=r.value
End If
Next r
581デフォルトの名無しさん:03/11/30 16:06
おっと見つかったらExit Forな。
582デフォルトの名無しさん:03/12/02 01:10
教えてください。

A
1 aaa
2 aaa
3
4
5 aaa
6
7

上記は、
・A列にデータが入力されている。
・所々データが入力されていない行もある。
というシートですが、このようなシートで、
空いている行を飛ばして、最後にデータが入力されている行
(この場合だと6行目)を取得するエレガントな方法って
ありますか?
583582:03/12/02 01:13
間違えました。
>(この場合だと6行目)
この場合だと5行目でした。
>>582
range("B65535").end(xlup).row
みたいな感じ?
585582:03/12/02 01:37
>>584
ズバリです!
なるほどー最終行からCtrl+↑したのと同じような感じですね。
ありがとうございました!
>>582
つーかそんなのちょっと調べりゃわかるだろ!勉強しろ
つーか、>>585の操作をマクロ記録したら>>584のようなコードになったりして。
588582:03/12/02 23:07
>>587
な、なりました…スゲェ!

>>586
ヘルプで一度はたどり着いておきながら、
xlupっていう発想がでなくて素通りしてしまってたんですよ…
589マグロ:03/12/03 11:04
WinXP proにOffice97をインストールして、作っていたマクロが動きません。
Application.FileSearch.FileName="*.jpg"(前後省略)
bmpやgifだと検索するのですが、なぜかjpgだと検索せずに実行時エラーが
でるのはなぜでしょうか?教えてください。

CHARワークシート関数
数値を ASCII または JIS コードの番号と見なし、それに対応する文字を返します。たとえば、種類の異なるコンピュータで作成したファイルからコード番号を取得し、CHAR 関数を使ってそれを文字に変換することができます。

↑をVBAで行いたいのですが・・・可能でしょうか?
(functionの中で上記機能を拡張したい為)
591 :03/12/06 19:23
Application.Worksheetfunction.Char〜 は?
Application.Worksheetfunction でワークシート関数は何でも使えるのですね?
今日はすごく勉強になりました!
ありがとうございます。
WorksheetFunctionは万能じゃない!
「Application.WorksheetFunction.×××」とすればどんな関数も利用可能かというと、これがそうじゃない。こんな関数くらい実現してよ、と思うくらい簡単な関数がなかったりします。そんな時はマクロにすべて頼らず、ワークシートも使ってあげましょう。
>>593
て言うかそんなもん使うなよ。あほか。
595593:03/12/07 11:08
>>594
Why?
隠しセルにその関数を書けばどんな関数でも使用可能。
597デフォルトの名無しさん:03/12/08 18:08
質問させてください。

VBAでExcelのシート上のデータを秀丸等にコピーするにはどうすればいいのでしょうか?
さすがに..秀丸までを制御するのは....難しくないか....
599デフォルトの名無しさん:03/12/08 20:21
>>598
なんかマルチになっちゃいました、すいません。
無理ですかね?メモ帳でもいいんですけど・・。
>>599
どういう形式か良く分からんけど、
txt形式で一端保存して、SHELL使って起動してみてはどうでしょうか....
曖昧な回答ですいません...
601デフォルトの名無しさん:03/12/08 20:48
>>600
txt形式で保存するって言うのはどうやるんですか?
>>601
マクロの自動記録ですぐで切るでしょ。

ex)
ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\xxx\My Documents\xxx.txt", FileFormat:= _
xlText
603デフォルトの名無しさん:03/12/08 22:45
>>602
親切にありがとうございます!!
604デフォルトの名無しさん:03/12/09 00:10
教えてください
A列に1〜Xまでの数字がランダムに(1、51、5、8・・・X)あって
それをマクロを使って自動的にソート(1,2,3,4、・・・X)できるようにするには
どうしたらいいのでしょうか?
ちなみにXの値はデータを入力するごとに増えていきます。
>>604
まず、マクロ記録で「並び替え」試してみようや
606604:03/12/09 20:35
>>605
すいません。それはできてました。
私がしたかったのはダブった数字があった場合自動的に数値が修正されるような
マクロにしたかったんです。
ぜんぜんできないのでおねがいします。教えてください。

1     1
6     2
2  →  3 
4     4
2     5
3     6
X     X
2     1
2     2
2  →  3 
2     4
2     5
2     6
X     X
608デフォルトの名無しさん:03/12/09 23:57
>>604 これで十分だろ。
Private Sub CommandButton2_Click()
Dim i As Integer
i = 1
With ActiveSheet
While (Not IsEmpty(.Cells(i, 1).Value))
.Cells(i, 1).Value = i
i = i + 1
Wend
End With
End Sub
>>606
sortじゃないような・・・
最大値もとめて
そこまで連番振るってこと?
セルの数合わなかったらどうすんの。
結局>>604は何がしたかったのだろうか。
解決したのだろうか?
気になります。
>>594
おまえ何が言いたいの?
ワークシート使わないでEvaluate使えってことか?
612デフォルトの名無しさん:03/12/11 19:11
こんちは。

あの質問したいです。
EXCEL VBAですが、以下のような処理をしたいのですが・・・、

「Cellsオブジェクトを用いた、セルのActive(Select)」

当然、Rangeだとエラーは出ませんが、
Cellsを用いるとエラーが出ます。

セルの行と列を任意に変更させながら、コピペ処理をしたいので、
Cellsオブジェクトでセルを選択する方法ってありますか?



Dim tuika_kensaku
tuika_kensaku = 0

'レコード区分の内容コピー
For rec_cop = 0 To 8

Worksheets("base").Cells(rec_cop + 2, 4).Copy
Worksheets("format").Cells(tuika_kensaku + 6, rec_cop + 3).Active ←ココでエラーが出ます
Worksheets("format").Paste

Next rec_cop
613612:03/12/11 19:27
すいません、修正します。
Active→Activate
Worksheets("format").Cells(tuika_kensaku + 6, rec_cop + 3).Activate←ココでエラーが出ます
614612:03/12/11 19:33
すいません、上記の問題(>>612)は解決しました。
どうも失礼しました。
615 :03/12/11 21:16
>>614
このスレを消費したんだからどのように解決したかぐらい書けや、ゴルァ。
おきまりとしてシート名が間違ってたとか?
>>615はスレの浪費だと思う。
618デフォルトの名無しさん:03/12/12 03:55
質問させて頂きます。
今、レコードの先頭列のセルのフォントに色を付けて分けるようにしようと考えています。
はじめ、カラーパレットを利用しようと思ったのですが、レコード件数がカラーパレットの最大値
56色を越える可能性があるため、RGBでフォントに色をつけようと思いました。
出来るだけ均等に色分けしたいので、

まずレコード件数を調べ
その数値を256の3乗-1から割り
対象レコード番号を掛け
16進数の6桁"0"詰めフォーマットし
左から2文字ずつ10進数へ変換しながらそれぞれRGB関数へ代入していく

For i = 1 to maxRecordNum
myHexRGB = Right(String(6, "0") & Hex(Int(16777215 / maxRecordNum * i), 6)
Range("A" & i).Font.Color = RGB(Val("&h" & Mid(myHexRGB, 1, 2)), Val("&h" & Mid(myHexRGB, 3, 2)), Val("&h" & Mid(myHexRGB, 5, 2)))
Next

とかなり面倒なやり方でやっています。(もっと楽にできそうですがわからなかったので)
そこで作成されたリストを見ると、当たり前のことなんですがレコードの近いものの色は
似てきます(グラデーションのように)。
しかし、近いもの同士の色が似ているとわかりづらいので
近いものはできるだけ違う色をつけるようにし、逆に似ている色はできるだけ離れた場所でつかう
というようなことをしたいのです。

WinXP,EXCEL2000で作業しております。

どなた様か、ご教授宜しくお願いします。
>>618
(1) すべての行の Font.Color を変える必要があるのか?
  2色交互とか3色順番ではダメなのか?
(2) たとえばセルの背景が白だと、
  Font.Color が RGB(255, 255, 255)に近くなるほど見にくくなる。
  背景色とのバランスを考慮すべき。
(3) Font.Colorを変えるより、セルの Interior.Color を変えた方が
  色の面積が大きくなるため、見やすいと思われる。
  この場合も (2) と同様、文字色とのコントラストを考慮する必要がある。
(4) RGB関数は、R + G*256 + B*65536 の値を返す。
  単純に割り算しただけでは、R が反映されにくい。
  RGB それぞれを別に計算した方がよい。
(5) RGB関数は、RGB(128, 0, 255) のように、十進数で指定できる。

 
620618:03/12/12 17:23
>>619
>(1)
どんなに似ている色であろうと一応全て(30〜60くらいの数です)違う色で仕上げたいです。

>(2)
はい、そうですね。初めは2パターンの色に分けてフォント色と背景色をそれぞれつけようと
思いました。

>(3)
セル中のテキストは"●"の一文字のみ(印のように)なのです。印刷が最終目的で、
確認したところ問題なかったのでFontでいこうと思いました。

>(4)
おっしゃるとおりでした。このご指摘で純粋に均等に色を振り分けられました。


やはり、結局色が似ている似ていないは曖昧なものなので、50前後の色を扱えば
肉眼ではわかりづらいものがでてくるのは当たり前なので

行番号が偶数ならR値を255、奇数ならR値を0
4で割り切れるものは網掛けをする

といった感じの最終手段をとることにしました。
(これでもやはり見づらいですがしょうがないですね)

いろいろとありがとうございました。
621デフォルトの名無しさん:03/12/12 18:10
初歩的な質問でスミませんが、組み込み関数が使えないでいます。

AverageとOffsetだけなのですが、subまたはFunctionの定義がないと言われます。
分析ツールのアドインは一応確認していて、ワークシート上では使えてます。

DeclareとかPublicとかのキーワードと一緒にググッてみましたが、
よく分かりませんでした。

ご存知の方がいらっしゃいましたら、ご教授お願い致します。
よろしくお願いします。
>>621
>>591
ワークシート関数とVBA内の関数は違うよヨ
623621:03/12/13 09:31
Formulaを使用して解決致しました。
ありがとうございました。
624デフォルトの名無しさん:03/12/14 00:59
一定時間になったら他のアプリケーションを使っていても、エクセルをアクティブにしたいです。

AppActivate "Microsoft Excel"
Application.WindowState = xlMinimized
Application.Windows("Book1").Activate
Sheets("Sheet1").Select
Range("A1").Select

と書いたのですが、出来ません。タイマー部分の記述はわかります。
どなたか教えてください
625デフォルトの名無しさん:03/12/14 07:33
タイマー部分の記述も書いて
626624:03/12/14 10:01
624です。

Windows("book1").Activate
Sheets("sheet1").Select

ActiveSheet.Unprotect

'15分ごとのタイマー

Do While Timer < TimeValue("23:53:01") * 24 * 60 * 60
DoEvents
Loop
Call UD_PASTE


この UD_PASTE の最後にエクセルに戻る機能を追加したのです。
よろしくお願いします。
Public Sub Hoge()
 Application.OnTime Now + TimeValue("0:15:0"), "Hoge"
 ExcelForeground '>>516
End Sub
628624:03/12/14 16:33
レスありがとうございます。>627
516のExcelForegroundを参考にしてモジュールに加えましたが、
どうもうまくいきません。
タスクバーの中で、ハイライトされるだけです。
629624:03/12/14 22:47
624です。次のように書きました。

AppActivate "Microsoft Excel"

Call ExcelForeground

Windows("book1").Activate
Application.WindowState = xlMaximized
Sheets("sheet1").Select
Range("A1").Select

これによって直前にアクティブなソフトの違いで以下の現象が起こります。
NG 非MS系ソフト Mozzila、筆王
NG MS系ソフト IE、Word
OK MS系ソフト ペイント、ワードパッド、Outlook
この違いは何でしょう?
630デフォルトの名無しさん:03/12/15 11:32
WIN XP EXCEL2002において MS FORM 2.0のFRAME貼って なかに optionbutton
複数貼って option buttonをクリックするとそれぞれの処理を
させたいのですが、イベントの呼び出し方がわかりません。
つまり frame外のoptionbuttonであれば

Private Sub Optionbutton_click()

となるところです。

わかる方よろしくお願いします。
>>630
???????
そのまま...で行けないか?
どっちにしろダブルクリックしたら勝手に作ってくれるだろ。
632630:03/12/15 16:43
>>631
そのままで行けません
ダブルクリックだとFrame.click()になります。
Frame内のオプションボタンはFrame外のオプションボタンとは
別扱いみたいです。

Frameを右クリック=>フレームオブジェクト=>編集
としてフレーム内の編集モードに入り
オプションボタン右クリック=>プロパティ
でプロパティの編集は出来るのですが、ふつうのプロパティウィンドウ
とは違うものが出てきます。そこのnameに1個目ならOptionButton1
と入ってるのですが、いったんこの編集モードを終了して
Frame外(ワークシート上)にオプションボタンを
新しく貼り付けますとさっきと同じOptionButton1という名前で作成されます。
OptionButton1_Click()で処理を与えますと
Frame外のOptionButton1のほうに反応します。

なので、Frame内のOptionButton1に反応させることが出来ないのです。

以上引き続き よろしくおねがいします。
633631:03/12/15 17:18
大変失礼しました。630さんの言うとおりですね....
いざとなったらクラスモジュールで捕まえられるだろうけど....
634631:03/12/16 23:46
>>632 もう解決したんならスルーして下さい。
>>他の方 恥ずかしいので見ないで下さい。
Sheet1上にFrame1があり、中に三個のOptionButtonがあると想定

標準モジュール:

Dim myClass1(3) As New Class1

Sub test1()
Dim myOpts As New Collection, cntrl As Object
With myOpts
For Each cntrl In Sheet1.Frame1.Controls
.Add Item:=cntrl
Next cntrl
End With

For i = 1 To Sheet1.Frame1.Controls.Count
Set myClass1(i) = New Class1
With myClass1(i)
.Label = myOpts(i)
.Index = i
End With
Next
End Sub
(つづく)
635631:03/12/16 23:47
(つづき)
クラスモジュール:

Option Explicit
Private WithEvents myLabel As MSForms.OptionButton
Private m_intIndex As Integer
Public Property Get Label() As MSForms.OptionButton
Set Label = myLabel
End Property
Public Property Let Label(ByVal LabelNewValue As MSForms.OptionButton)
Set myLabel = LabelNewValue
End Property
Public Property Get Index() As Integer
Index = m_intIndex
End Property
Public Property Let Index(ByVal intNewValue As Integer)
m_intIndex = intNewValue
End Property
Private Sub myLabel_Click()
Select Case m_intIndex
Case 1
MsgBox ("1")
Case 2
MsgBox ("2")
Case 3
MsgBox ("3")
End Select
End Sub

酔ってるので自分でもよく分かりません。動く..はず。とりあえずは。
で、コレをやったらframe外のやつにも同じようにせんと反応しないかも?
テスト中に色んな不思議な挙動が....
636630:03/12/17 08:34
>>634-5

まだ解決していません^^;
わざわざコード書いていただいて本当にありがとうございます。
早速試してみます。


637631:03/12/17 10:27
>>636
クラスモジュールの中の
「Let/get Label」「myLabel」やら「LabelNewValue」とかは昔の名残です。
気になるようなら修正してください。
Excel2000 / WindowsXP-Professional

あるシートに配置したオブジェクトの内容を更新した後、そのシートを印刷する
これの繰り返しを行おうとしていますが
オブジェクトの更新が行われる前に印刷が次々に行われてしまいます。
(つまり、最初のデータだけが何枚も印刷されていきます)

印刷前にシートをアクティブにしたり、選択したり。
困ったことに何を狂ったか、「印刷前に1秒のウェイトを入れてみる(application.wait)」とかしてみましたが
まったく効果がありませんでした。


Dim obj As Object
Set obj = Sheets("印刷用シート")
for i = 1 to 10
  obj.伝票番号.Value = "hogehoge" ' 最初に印刷したいデータを代入する
  Application.Wait (Now() + TimeValue("00:00:01")) '1秒待ってみるテスト。
  obj.PrintOut ' 印刷する
next i

こんな感じの流れになっています。(1秒待ちは全然意味ありませんでしたが一応記述)


新しいブック開いて、オブジェクト入ったシートを印刷枚数だけコピーしまくって
最後にブック全体を印刷してもいいんですが。 一度の印刷枚数が何千枚越えるので不安です。
なにとぞ、助言の程を。
>>638
そのコードでは何も更新されないと思う。
伝票番号とは何か?
i と伝票番号の関係は?
すべての値が hogehoge なのか?
何を変更しようとしているのか?
謎が謎を呼ぶ・・・。
>>639
説明不足でした。 ごめんなさい。
手作業で書いて、いー加減に書いたのが失敗です。素直にコピペする事にします。

Dim obj As Object
Set obj = Sheets("印刷用シート")
for i = 1 to 10
  obj.伝票番号.Value = Sheets("格納データ").Cells(i, 2)
  obj.伝票送り先.Value = Sheets("格納データ").Cells(i, 3)
  ' 以下、たらたらと代入の連続・・・


  Application.Wait (Now() + TimeValue("00:00:01")) '1秒待ってみるテスト。
  obj.PrintOut ' 印刷する
next i

別シート(sheets("格納データ"))に格納されているCSVデータを順番に連続印刷するという事を行いたいのです。
ブレークポイントで印刷前に止めたりするとオブジェクトに値が反映されるのですが
何もせずにマクロを起動させると、 印刷用シートに配置してあるオブジェクトに代入せずに
次々に印刷が行われてしまうのです。
>>640
漏れ、VBAは横で覗いた事くらいしかないけど、そんなんで印刷するシート変わるのか?
なんか、print前に、activeとかしなきゃならんのではないか?
>>640
漏れ、VBAは横で覗いた事くらいしかないけど、そんなんで印刷するシート変わるのか?
なんか、print前に、activeとかしなきゃならんのではないか?
>>640
「伝票番号」とか「伝票送り先」というのは、
たぶんシートに貼りつけた TextBox なのでしょう。
シート「印刷用シート」を作って
「伝票番号」とか「伝票送り先」というふたつのTextBox を配置し、
For 〜 Next の間を下記のようにして実行してみましたが、
期待通りに (1枚め A1, B1 から 10枚め A10,B10) 印刷できました。

For i = 1 To 10
obj.伝票番号.Value = "A" & i
obj.伝票送り先.Value = "B" & i
obj.PrintOut
Next i

もしかして、
画面更新が抑止 (Application.ScreenUpdating = False) されているとか
再計算が手動 (Application.Calculation = xlManual) になっているとか。
一応、
1.新しい印刷用ブックを作る
2.印刷用シートをコピーする
3.コピー先のシートを印刷する
4.コピーしたシートを警告なしに削除する
5.2〜4の繰り返し
6.警告なしに印刷用ブックを閉じる

この手順でなんとか印刷はできましたので。修正にかける時間がなんとか稼げました。


>>641
638に書いたとおり、アクティブだとかセレクトとかは試してみたのですがダメでした。

>>643
むー。 新しいxls作って 640さんと同じように作成してみましたが
やはり反映されません。
Application.ScreenUpdatingとApplication.Calculationは触れていないのですが
念の為、確認してみます。
(再計算が手動…って初めて聞きました。 ……これらが原因だったらいいなぁ)
645630:03/12/18 15:48
>>634-5

教えていただいたコードを参考にしてフレーム内のオプションボタン
をおすと、希望の処理に飛ぶことは出来るようになりました。
ありがとうございます。

ファイルオープン時に実行するようにすることで
1クリックで使うことが出来、フレーム外と操作性が同じになりました^^





646631:03/12/18 17:37
>>645
漏れのテスト時はフレーム外のopぼたんの処理が不安定になったんだが
その辺りのレポできればキボン
647デフォルトの名無しさん:03/12/19 21:43
EXCELでグラフを描くときみたいに
データ範囲を任意に指定して取り込みたいのですが
どうすればいいのでしょうか?
>>647
refeditがある。
あるけど.....
649デフォルトの名無しさん:03/12/19 22:33
>>648
ありがとうございます,,,って
バ,バグ!?
650デフォルトの名無しさん:03/12/20 10:49
VBではプロシージャIDの設定によって
クラスの任意プロパティをオブジェクトの記述だけで参照する
方法があるらしいのですがVBAでもできますか?
あるサイトでオブジェクトブラウザからプロシージャIDを
規定値に設定することで可能とあったのですが
プロシージャIDを設定するところが見当たりません。
>>650
モジュールをエクスポーとしてエディタで開く。
>>651
VBを持っていない場合は?
Excel2000くらいまでは、簡単にプロジェクトのパスワード破られちゃうのですか?
>>651
!!
VB付属のエディタだとばかり思っていました。
失礼致しました。
ありがとうございました。
エクセルのファイルで1行から10行まで
アトランダムにグループ分けされているデータがあります。
グループ一つおきに、薄く色を付けたいのですが、
VBA初心者ですので簡単にできる方法を教えください。
group menue nedann
1 カレー 500円
2 天丼 600円 
2 親子丼 400円
2 たまご丼    350円
3 ラーメン    750円
3 やきそば    400円
4 サラダ     250円 
657655:03/12/20 14:11
ちよっと説明不足でした。
一行おきの色付けでなく
グループの行数がさまざまに
変化している表です。
658650:03/12/20 14:28
実は解決していなかったので再びのこのこと・・・
Attribute VB_PredeclaredId = True
としておけばプロシージャIDの設定が可能になると思ったのですが
Web検索してもよくわからずでした。
逆にVB_PredeclaredId 属性の設定を変更してしまうと
モジュール内部に矛盾が生じることがあるため、テキストエディタで
編集すべきではない、というの見つけました。
一体どうすれば・・・
659656:03/12/20 14:33
>>657
だからぁ〜
グループ一つおきってことは
groupのセルの値が偶数か奇数かで判断すればいいだけでしょ。
それは2で割った余りが0か1かってことなので
あとはリンク先の情報から出来そう、ってことです。

660655:03/12/20 14:48
またまた説明不足でした。655に示した表では各グループの行数が
group1が1行、group2が3行、group3が2行、group4が1行
となっているので、group1(1行)とgroup3(2行)に薄く色を付けたいんです。
661656:03/12/20 15:00
>>660
>>となっているので、group1(1行)とgroup3(2行)に薄く色を付けたいんです。

だから、、、、、、
group1ってのは「groupのセルの値」が「1」ってことなんでしょ。
でgroup3ってのは「groupのセルの値」が「3」ってことなんでしょ。
各行のgroup列が偶数奇数かどうか
=group列の値を2で割りきれるかどうか
=group列を2で割った余りが0か1か
で判断しなさいって言ってんの。

あとは656で最初にヒットしたページでできるでしょう。
MODで

あと10分でこのスレから消えるから
662655:03/12/20 15:16
解決しました。
ありがとうございます。
group番号が連番でなかったので混乱してました。
ものすごく基本的なことなのかもしれませんが
accessでいうところのオートナンバーってあります?
大量のセルに一度で番号付けしたいんですがVBAでしないと駄目なんですかね。
>>663 ここはVBAスレだよ?
★Word/Excel(MS-OFFICE)初心者スレッドPart12★
ttp://pc2.2ch.net/test/read.cgi/pcqa/1071336981/
とかで聞くのが先じゃないかと。
>>663
オートフィルじゃだめなの?
666 :03/12/27 18:41
あるセルの文字に下線をつけたいんだが
Cells(x, y). のあと、どうすればええの?
>>666
マクロ記録しろ、ボケ
エクセルのファイルが壊れたとき、VBAのコードを抽出する方法を知ってる方いませんか?
シートのデータは取り出せるんですが、コードを取り出す方法は検索でも見つかりませんでした…
>668
OpenOfficeで上書き保存しる
でマクロ無効で開いてコードコピー
漏れはこれで助かった
>>669
ありがとうございます。
今は問題のファイルが手元にないので、今度OpenOfficeを入れて試してみます。
671デフォルトの名無しさん:03/12/28 01:43
>>667
わかんね〜なら出てくんなよ、このクソヴォケが(ワラ
>>671
マクロ記録も知らないカス
673デフォルトの名無しさん:03/12/30 19:12
Range("A1").Name = "sage"
と、一度設定したRangeの名前を消してしまいたいのですが、
どうやったらよいのでしょうか?
VBAどころか、手での操作でもキャンセルする方法がわかりません。

ActiveWorkbook.Names("sage").Delete

手での操作、HELPで探したか、ゴラァ!
675673:03/12/30 20:12
>>674
おおすばらしい。
ですが、手での操作がまだわからんちんです。
ゴラァ!ついでに教えてください。

縦横計算+ワークシート関数以外でのExcel歴20時間ぐらいなもので
>674
漏れも設定方法しかしらない。
セルそのものを削除したら一緒に消え去ったから、
枠組を崩さない場所にcut&pasteしてからセル削除してる……
挿入-名前-定義-削除

自力で探す努力もしろやぁ!で無視するつもりだったが、
676の分ツー事で・・・
Excelの使い方はスレ違い
679673:03/12/31 12:33
674,675,677さん。ありがとー。
手での操作はヘルプでは見つけられなかったけど、そのあと偶然発見しやした。
680デフォルトの名無しさん:03/12/31 14:46
エラーで再起動したときなど、マクロ名が変わってしまいます。(正常なときもある)
実行すると”同じ名前のファイルが既に開いてます。…一方を閉じるか…・名前の変更…・”のmsgがでます。
'F:\部品1.xls'!A602未納品表示  この  'F: と  '  を除き
部品1.xls!A602未納品表示  とマクロ名を変更すると正常動作します。
Fはバックアップ用の外部カードです。本体HDD→Fスロットと連続保存したときに多く発生します。
回避するにはどうすればいいのでしょうか。(EX97 98me )
>>680
Fスロットってなんだ?
Exってなんだ?
98meってなんだ?

そんなあなたに図解で解るWindows
682デフォルトの名無しさん:04/01/01 19:58
Access VBAのスレがない…
>>680
開かれているブックと同じ名前のブックを
開こうとしているようですが、
どんなコードを実行しているか分からないので
どう回避すべきか分かりません。
保存のあとクローズしていますか?
684680:04/01/02 00:30
>683
保存まではコレだけです。
For CCC = 1 To Workbooks.Count
保存先 = "C:\My Documents\EXCEL DATA\" & Workbooks(CCC).Name
Workbooks(CCC).SaveAs FileName:=保存先
Next CCC

For CCC = 1 To Workbooks.Count
保存先 = "F:\" & Workbooks(CCC).Name
Workbooks(CCC).SaveAs FileName:=保存先
Next CCC

クローズするとは??? (この辺にヒントが・・・・期待!)
685デフォルトの名無しさん:04/01/02 01:38
CCCとか保存先とか、すごい変数名だな
686デフォルトの名無しさん:04/01/02 01:41
>>685
CCCは分かるが、保存先のどこがすごいんだ。
687 :04/01/02 01:49
Kさん 好循環  Aさん 悪循環  
 (健康体)  (喘息)

1.(神が喘息であるかないかを決める)
2.K 喘息でない人 A 喘息の人は
は体力がある    体力がなくなる

3.K        A 行動力、
          五感(嗅覚)が鈍り感性が変化する

4.K&A 神は異常な感性の人間は本来人に迷惑をかけ
るから外に出てはいけないと思っている。

5.K 変化なし   A アトピーになる
6.K 正常な感性  A 外に出なくなりさらに異常な感性になる
7.K 正常な人間   A 異常な人間(レッテル)
8.K&A 死  9.K&A      来世
10.K&A 神は異常な人間は人に迷惑をかけるので行動
を抑制する必要があると思っている。

11.K&A 神が喘息であるかないかを決める
12.K 喘息でない  A 喘息である
13.K&A    1.に戻る

これは事実。広めようぜ
解決法:寝て起きて、やな気分でも、続けるけること。
体力をつけると感覚が正常に戻り、
アトピーも快癒に向かう。 目安としてグランドを10週くらい。
あとはウォーキング 2.3時間を目安にウインドーショッピングや本屋めぐり
688デフォルトの名無しさん:04/01/02 02:36
>>686
日本語を変数名にしてること
689680:04/01/02 03:26
日本語の使用はバグの元になりやすいので使わないようにという説と、ドキュメント性の向上から大いに使うべしとの
説もあるようで、後者を採ってます。トラブるようなら一括置換すればいいわけで…・  またFORのiは1と混同しやすいので
避けて適語を使ってます( iとl Iと1 は忌避文字として原則として単独では使わないようにしてます)
Function ARC(中心位置X, 中心位置Y, 半径R, 円弧開始角度, 円弧終了角度, 中心点クロス長さ, 線の色)のように
日本語を多用してます。邪道かもしれませんが・・・・・(グループ作業でなく単独で事務処理に使用しているので)
>>689
日本語を避ける理由は概ね次のとおり。
・移植のときに漢字コードの変換を必要とする場合がある。
→不可逆変換を繰り返すと同一性が失われる。
・入力に手数が掛かる。
→入力モードの切り替え、変換など
・見た目が似ていて違う字が多いから誤解を生じやすい。
→一、−、ー、-、‐、─ ……どれがなんだか。
以上はいずれも個人がVBAを使う限り余り気にしないでいいと思う。
691デフォルトの名無しさん:04/01/02 12:02
ドキュメント性の向上はほとんどないだろう。

>FORのiは1と混同しやすい
世の中のプログラマの大半は混同せず使ってるぞ。まぁ、他の言語だと$iみたいに他の記号
がつくからというのもあるが。

まぁ、確かに個人ならどうでも良いけどね。
>>689
いや、別にいいんだけどさ、type面倒じゃない?(w
変数名のつけ方は十人十色。
みんな自分の書き方が最良だと思っているわけで、
それは質問内容とは別の問題です。

>>684
エラー発生時に開かれていたブックは、
再起動したときに解放されず、「使用中」のままになることがあります。

C: から読込んだブックを F: に保存すると、
表示されているブックのパスは F: になります。
F: に保存した後でエラーが発生すると、
「F: のブックが使用中」になり、再起動して C: から
同名のブックを読み込もうとすると「既に(F: が)開いています」になります。

回避策としては、むしろ再起動しなければならないようなエラーを
起こさないようにすることだと思います。
彼らは別に質問に答えているわけではないだろう。
695デフォルトの名無しさん:04/01/02 15:39
>>693
>変数名のつけ方は十人十色。
コーディングスタンダードというのがあります。一般的な記法に沿う方が望ましいです。
理由はコーディングスタンダードに書かれています。
>>695
そんなことは百も承知。
にもかかわらず、結果は人それぞれ。
どんなに議論しても「正しい表記のしかた」という
結論は出ない。
697680:04/01/02 16:37
>693
産休です。エラーは”エクセルが原因で・・・・・どうのこうの”だったり
プリンタが双方向通信のため、紙詰まりなどのエラー時の内容をバッファし、後々まで影響を与えたり、
ブラウザのエラーが波及したりで98系のOSの弱点をモロに受けてます。最小限のアプリ稼動にします。

変数名のコーディングスタンダードなるものは知りませんでした。(我流のツマミ食いプログラムなので)
漢字でもミス防止に原則的にコピペで書いているので打つのは一回だけです。また定型文は
単語登録しており(例 えん→YEND = Range("J9900").End(xlUp).Row)また自作関数も多用し
たいていは類例のコピペ+αで済んでます。MINBITより最下位ビットと書くほうの恩恵を感じる派です。
698デフォルトの名無しさん:04/01/02 21:46
>>696
うちの開発じゃ規約から外れた書き方はマイナス評価対象だけどな。
海外掲示板用オフラインリーダーを作るスレ
http://pc2.2ch.net/test/read.cgi/tech/1072883528/

海外でよく使われていうる掲示板スクリプト
専用のオフラインリーダー作って下さい。

必要な条件はID、PASSを管理できること、
OpenJaneみたいな三面型の見た目。
簡単にローカライズできるように言語ファイルを採用
>>698
まともな開発セクションならそうだと思う。
好き勝手に書かれたら保守できなくなるから、
社内で十人十色は避けるべき。
しかし、それはローカルな「社内ルール」であって、
どうルール化するかはユーザそれぞれに
事情があるわけで、ひとつには決まらない。
結果として、すべてのプログラムにあてはまる
コーディング規約というのは存在しない。
むしろ十社十色というべきだったかな。
701690:04/01/02 23:21
>>697
>690では「個人なら」と書いたが、仕事では全く使えない。
なぜならば、
得意な単語登録に頼るプログラミングは可搬性が全くない。
Copy&Pasteに頼るプログラミングは保守性が損なわれる。

エラーも然ることながら、そうしたもんだと言う割り切りも必要だね。
702デフォルトの名無しさん:04/01/02 23:59
皆様、オープンな会社にお勤めになられてらっしゃいますね。
VBAなんて、サル酒みたいなもの。個人の大事な資産さ。
ちょっと外して、VBAでポン。あとは、事務所に戻って、やってるふり。
データを納入するときは、きれいさっぱりと消し去るよ。
大量のデータを入力して、くたびれきった顔をしてればいいのさ。
703デフォルトの名無しさん:04/01/03 02:37

方眼紙を造り作図したいのですが
行の高さ と 列の巾の関係を教えていただけませんか?
よろしくお願いいたします。

699はマルチポストです
やめてください
705デフォルトの名無しさん:04/01/03 11:15
>>700
全ての開発に適用できる完璧なコーディング規約はないが、どんな場合にもいえる最大公約数的
な規約はある。日本語変数名を使うな、というのはその一つといっても良いだろうさ。

>>702
オープンの意味がよくわからんが、後は同意。

>>704
釣られんなよ。
706デフォルトの名無しさん:04/01/06 01:06
VB6.0使ってます。
WSのイベント処理で、複数のセル内容を一度に変更した場合(一斉消去やペースト)に、
各セルの変更後の入力内容を取得したいんですが、簡単なやり方ってあります?

target.Addressの文字列解析するしかないんでしょうか?
(target.Address→$A$1:$C$3,..)
>>706
何が目的なのかよく分からないが
こういう方法もある..
例えばその複数の中に条件を満たすものがあれば〜のような時とか

For Each itm In Target.Cells.Value2
Debug.Print itm
Next itm

まぁ、他にも方法はあるけど...ウォッチ式でtargetを見てみてはいかが?.
ところでVB6.0って....?
708707:04/01/06 02:14
ゴメンナサイ、なんかイヤミったらしい文章になってました。
反省してます。
しかもvalue2って...

補足(?):使いづらいけど配列使ったり...あとセル一個だけの時逃げたり....

Dim CelAry() As Variant

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then Exit Sub
ReDim Preserve CelAry(UBound(Target.Value, 1), UBound(Target.Value, 2))
CelAry = Target.Value
For Each itm In Target.Value
Debug.Print itm
Next itm
End Sub

頑張ってください。
709デフォルトの名無しさん:04/01/06 02:42
>>704
Rangeオブジェクトの
RowHeight
ColumnWidth
Height
Width
StandardHeight
Font.Size
を見ろ。
710デフォルトの名無しさん:04/01/06 23:30
Private Sub CommandButton1_Click()
Dim Flag As Integer
Dim 検索文字 As String
検索文字 = "*" & txtTitle.Text & "*"
Worksheets("dataSheet").Select
For Each Rng In Range("B3:B1000")
・・・・

このような形でコマンドボタンを押したらエディットボックスの文字を取得し、”検索文字”に値を代入し、dataSheet内の文字列を検索をかけるプログラムを作りたいのですが
Worksheets("dataSheet").Select
の部分でエラーが出てしまいます。どうしてでしょうか?
>>710
そんなシート無いから。とか。
ワークブックが二つ開いてるとか。
>>710
エラーメッセージは?
713706:04/01/07 01:25
>>707
ForEach文でうまくいきました。
お陰で助かりました。
ありがとう。
714デフォルトの名無しさん:04/01/07 01:29
>>712
>>711
ありがとうございます。
できました。


X以上の数値行数のcountは、シートでは  =countif(範囲,">X")  で出来るのですが、
VBEではどのようなプログラムを書けばいいのでしょうか?
>>715
うーん....例えばどんな風に「範囲」を受けるかでアプローチは変わってくると思うけど、
俺の知ってる限りはそんな関数は無いです。
やるとしたら>>707のようにforeachでひとつずつ調べて別の変数で足してく事になると思う。
そんな事より隠しセル作ってワークシート関数使った方が楽なような気もする....です。
どうしてもというなら
Function vbCountIf(ByRef Target As Range, ByVal trigger As Integer) As Integer
Dim inti As Integer, intj As Integer
For Each itm In Target.Value
If Val(itm) > trigger Then inti = inti + 1
Next
vbCountIf = inti
End Function
みたいな感じになるかと.....思い.......ます。
(Worksheet_ChangeとかSelectionChange内で使う場合)
他にも方法はあるでしょうがどうしても複数行になるのは避けられないかと。
>>713,>>714 お粗末さまでした
717680:04/01/07 11:16
>680でマクロ名の勝手な変更の件で質問したものです。事後報告します。
その後エラー終了以外では症状は出なくなりました。しかしエラーそのものは
たまに起きるので同様の症状になります。そこでググり全ブックに
”挿入→名前→定義→削除”を実行したところマクロ名が正しいものに直ってしまいました。
こんな定義した覚えはありませんが、なんらかで増えていき複雑なリンクになってしまったようです。
今後VBAはVC#A.NETになるのかが気になる今日この頃・・・
>>718
VB.NETAになるから質が悪いです。
どちらにせよ、現行マクロが使えるかどうかが激しく不安...
>>719
ネタですか w
質問させて頂きます。
チェックボックスのチェックされる箱型の部分(レ点が入る部分)のサイズを変更したいのですが。
そんなの無理なんでしょうか?
できないような気がする
それらしいプロパティ無いみたいだし
>>722
でっかい画像を二枚用意して、image_ClickでZOrder変えてやるとかはどうだろう。
いや、解決になってないのは分かるんだけどさ....
オーナードロー
726デフォルトの名無しさん:04/01/09 22:29
質問させて下さい。

VBA初心者です。
SQLServerに接続してデータを取得し加工するマクロを作成中なのですが、
データ取得時間がかかりすぎると、データを取得できていないのにマクロの処理自体が終了してしまいます。
DBの接続時間は無制限に設定しています。
また、クエリアナライザなどでは時間がかかりますが、きちんとデータの取得が行えますので、SQL文は正しいと思います。
SQL文の結果取得に時間がかかるとマクロは処理を待たずに強制的に終了してしまうのですか?

わかりずらい文章で申し訳ありませんが、よろしくお願いします。
どんなことやろうとしているかわからないけど
「DB問い合わせがタイムアウトになるくらいの問い合わせは
DBをちゃんと設計できていないのではないか?」
って気がする
DAOかADOかで答えが変わるとおもうが

DAOならQueryTimeOut、ADOならCommandIimeOut
ってプロパティあるし。

広域ネットワーク接続や大規模DBとかで応答に時間がかかるなら
ADOのExecuteCompleteイベントつかって非同期にしたほうがよかろ
あるワークシートをアクティブにしたまま、他のワークシートのセルの値を取得することってできますか?
>>729
普通にできるはずです。
Sheets("他のワークシート").Range("値をとりたいセル").Value
でとれる
というか、何かをアクティブにしたときは、ActiveHogeで参照できるようになるだけで、
あとは全く変わらないよ。
初心者にいい参考書って何がありますか?
>>733
どこまで初心者か知らんけど、

1.概念と文法について書いてある本一冊。
2.Officeヘルプ。
3.マクロ記録、

でOKかなと思います。

735デフォルトの名無しさん:04/01/11 16:43
テキストボックスの左の余白みたいのを消す方法ってあるんですか?
TextAlighを1に設定しても消えないんですが・・・
SelectionMarginプロパティで消せます。
多分この空間のことだと思うけど。違ったらごめんよ
737デフォルトの名無しさん:04/01/12 01:09
コンボボックスの初期値を先頭ではないところに設定する方法ってありますか?
あと、コンボボックスのリストをMAXの長さに合わせたいのですが教えてください。

(例)初期値を2006にしたいが現在は先頭の2004。

 ------
|2004|▼
 ------------
|2005    |
|2006    |
|2007    |
 ------------
       ↑
    ここの空白の消し方がわからないです。
>コンボボックスの初期値を先頭ではないところに設定する方法ってありますか?
ComboBoxのListIndexプロパティをいじれ
Indexは0から数える
この場合はListIndex=2

もしくはComboBoxのValueで値そのものを指定する
この場合にはComboBoxに無い値でも設定できる(良し悪し)

>あと、コンボボックスのリストをMAXの長さに合わせたいのですが教えてください。
言ってる意味がわかんねぇ
>>738
わからんのならそんなに威張るな。な。
>739
あの聞き方でわかるんならお前が答えてやれば
>>738
その下の絵を見てもわかんねぇの?

>>739
質問者か? 煽るなよ。

>>740
>738か? 釣られるなよ。
やっといつものVBAスレっぽくなってきたな。
....つまらん。


ListWidth プロパティ
コンボ ボックス (ComboBox) コントロールのリスト部分の幅を設定します。
構文
object.ListWidth [= Variant]
ListWidth プロパティの構文は、次の指定項目から構成されます。
指定項目 内容
object 必ず指定します。オブジェクトの名前を指定します。
Variant 省略可能です。リストの幅を指定します。0 を設定すると、コンボ ボックス (ComboBox) コントロールの幅と同じになります。既定値は、コントロールのテキスト部分の幅と同じになります。
解説
複数の列から構成されるリストの場合は、できる限りすべての列を表示できる幅を設定してください。
ヒント コンボ ボックス (ComboBox) コントロールをデザインするときは、表示するデータと併せて垂直スクロール バーも表示できる幅を設定してください。
2004〜2007の値の場合、4桁分の幅にしたいってことかな?
それで、30000とか出てきたら、それに合わせて5桁分に広がってほしい。
不必要に幅が広いから気に入らない。

こういう意味だと思うが。
744742:04/01/12 11:44
コンボボックスを必要以上に狭く作ると
なんか>>737みたいになるやん。
その事ちゃうんかな?、と思ったんだけど
745デフォルトの名無しさん:04/01/12 13:43
うまく抽出が実行できません。
TextBox1に検索文字を書き込み、セルA3に設置したコマンドボタンを押すと
A4以下に書き込んだデータの検索を行うソースを書きました。しかし、抽出がうまくいきませんでした。

ソースは以下のような形です。教えていただけると幸いです。

Private Sub CommandButton1_Click()
Dim 検索文字 As String
検索文字 = TextBox1.Text
Dim Drange As Range, Crange As Range
Worksheets("画面用").Select

' 検索条件式の入力
Range("H1").Value = Range("A1").Value
Range("H2").Value = 検索文字

' フィルタの実行

With Worksheets("画面用")
Set Drange = Worksheets("画面用").Range("A4").CurrentRegion
Set Crange = .Range("H1").CurrentRegion
End With
Range("A1").Select
Drange.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Crange, Unique:=False
Set Drange = Nothing
Set Crange = Nothing



End Sub
>>745
疑問1.A1は一体何が入ってるの?
疑問2.DrangeはともかくCrangeにCurrentregionって...?

てか、全体的になんか意味不明臭がぷんぷんします。
もっと情報キボンヌ
747デフォルトの名無しさん:04/01/12 15:36
>>746
H1以降には検索条件が入力されているつもりです。
A1にはタイトル名が記入されています。例えば、”住所”とか。
それを、単にH1に書き込んでいます。結局、抽出条件はH2 以降に書き込んでいます。

データはA4、B4、C4、D4以降に入力されています。

>>746
>>745を見て、そんな疑問がわくようじゃ答えられるはずも無いから、もう書き込まなくていいよ。
749VBA初心者君:04/01/12 18:18
質問があります。
ユーザー設定のツールバーの名称を動的に変更したいのです。
具体的に言うと、名称を特定のシートの特定のセルに入力された値にしたいのです。
マクロ登録でやってみましたが分かりません。
WIN98SE、EXCEL2000です。
よろしく御願いします。
CommandBarのNameプロパティ
751VBA勉強中:04/01/14 10:34
すみません、質問させてください。
エクセルで記録したマクロをVB上のソースで使うときに

エクセルのマクロで ActiveSheet.PageSetup.PrintArea = "$A$1:$I$50"

をVBで
Dim XLS As Object
Set XLS = CreateObject("Excel.Sheet")
XLS.Application.Worksheets(シート名).PageSetup.PrintArea = "$A$1:$I$50"
と記述するまでは出来たのですが、

エクセルマクロの
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
がVBで動くにはどのような記述をすればわかりません。

どなたかご教授おねがいいたします。
752VBA勉強中:04/01/14 11:24
別の方法で、マクロを使わずに事故解決できました。
もうしわけありませんでした。
Excel総合相談所のスレから誘導されましたのでこちらにて質問させて頂きます
<質問>
使用OS:WinXPHome
使用ver:Excel2000

作業ファイル、参照ファイルを作成(同ファイルの別シートではなく、別ファイル)
作業ファイルのセルD1に
if(作業ファイル$A1=参照ファイル$E1,参照ファイル$H1)
という条件式を入力した後に、
作業ファイルのセルD1からセルD1000まで右下隅ドラッグドロップ

1.FALSEを返した最初の行xで処理中断
2.xに1つ行挿入
3.参照ファイル$Ex:$Gxを作業ファイル$Ax:$Cxにコピー
4.作業ファイル$D(x-1)の条件式を用いて処理再開
<作業ファイル>
   A列   B列   C列   D列
1   10    20    30    if(作業ファイル$A1=参照ファイル$E1,参照ファイル$H1)
2   20    30    40    if(作業ファイル$A2=参照ファイル$E2,参照ファイル$H2)

<参照ファイル>
   E列   F列   G列   H列
1   10    20    30    40
2   30    30    40    50

例えばこの状況だと
作業ファイルA1=参照ファイルE1なので参照ファイルH1の40が作業ファイルD1に返りますが、
2行目だとD2にFALSEが返ってきてしまいます
そこで、A2に新しい行を挿入して

<作業ファイル>
   A列   B列   C列   D列
1   10    20    30    if(作業ファイル$A1=参照ファイル$E1,参照ファイル$H1)
2    ← 挿入した行
3   20    30    40    if(作業ファイル$A2=参照ファイル$E2,参照ファイル$H2)

のような状況にして

1   10    20    30    if(作業ファイル$A1=参照ファイル$E1,参照ファイル$H1)
2   30    30    40    if(作業ファイル$A2=参照ファイル$E2,参照ファイル$H2)
3   20    30    40    if(作業ファイル$A2=参照ファイル$E3,参照ファイル$H3) ←2を3に変更

このような処理がしたいと考えているのですが、説明が下手で申し訳ありません
どなたかご教授お願いいたします
>>753

作業ファイルのシートを work, 参照ファイルのシートを ref とすると、
(1) work の A列を1行めから順に下に見ていき、
(2) work のA列の値=ref の同一行E列の値 なら
  refのH列をworkのD列にコピーする。
(3) そうでなければworkのその行の上に1行挿入して、
  refのE〜H列をworkのA〜D列にコピーする。
(4) A列に何も値がなければ終了
ということでいいのかな?
わからないことが多いなぁ
参照の形式じゃないといけないのか、それとも参照ファイルから値をコピーしたら確定していいのか?
最後の「作業ファイル$A2=参照ファイル$E3」はあってるの?
どんどん行を追加していっって参照ファイルの行数が足らなくなると条件式がFalseになって無限に挿入にならない?
A列やE列の値はランダムに並んでるのかソートされているのか?

やりたいのはこういうことじゃないの?
1.Aの値でE列を調べて同じ値が見つかったら、その行のHをDにコピー
2.E列に見つからなかったらAより大きい一番小さいE値の行をさがして挿入
3.次のAに進む
もしくは
1.Ax=Exになるように作業ファイルの行を移動させ、HxをDxにコピー
2.全部移動させて空行があったら参照ファイルから同じ行をコピー
757753:04/01/15 01:52
すみません、
>最後の「作業ファイル$A2=参照ファイル$E3」はあってるの?
この部分が「作業ファイル$A3=参照ファイル$E3」でした

具体的にはExcelで簡単な商品データを管理している状況でして、
売上ファイルを月ごとに0301売上・0302売上のように年別・月別にファイルに保存してあるのですが、
それらのファイルを用いて該当年度の商品の月別売上数を一覧できるようにしたいのです

売上ファイルには商品コード・商品名・月売上個数が入力されていますので、
「0301売上」ファイルからA列・B列にそれぞれ入力されている商品コード・商品名を「03年度売上集計」と名付けたファイルのA列・B列にコピーして、
「03年度売上集計」側に入力された商品コードと「0301売上」側の商品コードが一致したら
「0301売上」側の月売上個数を「03年度売上集計」側の「1月」列に転写したいのです
同じように「0302売上」の月売上個数を「2月」列に、「0303売上」の月売上個数を「3月」列にといった具合です

1月だけだとif(作業ファイルの商品コード$A2=参照ファイルの商品コード$A2,参照ファイルの月売上個数$C2)をC2に入力して
C列の下までオートフィルするだけでうまく行けたのですが、
2月、3月と月によって新商品が出ると不規則に新しい行を挿入する様式になっているために
1度その列にFALSEが出るとそれから下すべてがずれてしまってFALSEが返ってきてしまうのです
そのため、
  最初にFALSEを返した行の上に1つ行を挿入
→「0301売上」から該当する商品コード・商品名をコピーして「03年度売上集計」にペースト
→挿入した行の1つ上のC列から下に向けてオートフィル
→適当な場所で離してFALSEが出ているか確認
以上の繰り返しを手動で行っていました

参照の形式を取っておけばもしも「0301売上」側の値を変更しても整合性が取れるのではと考えた次第です
また、表の並び順を変えたくはありません
下手な説明で申し訳ありませんが、よろしくお願いします
>>757
あえて言わせてもらうと、アクセス買ってきてクエリで処理したほうがよくないですか?
759753:04/01/15 19:52
回答頂きありがとうございました
アクセスは敷居が高いと思っていたのですが、よい機会ですのでそちらも勉強してみることにします
>>757
この程度なら
Excel VBA でできると思いますが、
サンプルコードを書くのはつらい。
結局全部書くことになりそうだから。
ttp://www1.plala.or.jp/chikada/
エクセルシートでパックマンやインベーダーゲームが遊べます

たまには遊んでください
762デフォルトの名無しさん:04/01/16 13:06
MsgBoxの表示位置って指定できるのでしょうか?

今、Excel2000でグラフ表示のマクロを組んでいます。

Do
グラフ表示処理
 
 確認 (再表示 or 終了)
If 終了 = True Then
Exit
End If
Loop
 
みたいな処理なのですが、
確認を、MsgBoxで行うとグラフが隠れてしまいます。

コマンドバーで位置指定する方が、いいのでしょうか?

皆さんは、どうされていますか

>>762
VbMsgBoxSetForeground というのを指定するとよいらしい。
http://www.accessclub.jp/beginer/cd/help/help_12_1.htm
MSGBOX, 最前面 でぐぐってごらん。
>>762
SetWindowsHookEx でひっかけ
フックプロシージャで HCBT_ACTIVATE を捕らえて
SetWindowPos で位置決めだ
UnhookWindowsHookEx も忘れずに

無論フックの際はインスタンスハンドルの取得も必要だぞ
実行のパターンが複数あるから則したウィンドウハンドルを指定せい
本体からならクラス名 "XLMAIN" というようにな

謂われてワカランようなら位置なんぞ気にするな
さもなきゃユーザーフォームでも使え
765デフォルトの名無しさん:04/01/16 23:06
初心者ですみません。質問です。

A3セルからActiveCellの上のセルまでの範囲を
選択するにはどうしたらよいのでしょうか?

ご指導のほどよろしくお願いします。
>>765
こんな感じでどう?
If ActiveCell.Row > 1 Then Range(Cells(3, 1), ActiveCell.Offset(-1)).Select
>>764
インスタンスハンドル?とウインドウハンドルは違う予感。
>>767
インスタンスハンドルを取得するためにウィンドウハンドルを指定する
Excel ではウィンドウハンドルをプロパティとして保持していないため
これを取得する必要がある
おわかり?
喪前のようなヤシの出る幕じゃねーぞ
769デフォルトの名無しさん:04/01/17 10:55
EXCELのtextboxで悩んでいます。
textboxで改行するには、[Shift]+[Enter]か[Ctrl]+[Enter]なのですが、[Enter]のみで改行する
方法が分かりません。
Private Sub TextBox1_GotFocus()
Application.OnKey "{ENTER}", "+{ENTER}"
Application.OnKey "{~}", "+{ENTER}"
Application.OnKey "{ENTER}", "+{~}"
Application.OnKey "{~}", "+{~}"
Application.OnKey "{ENTER}", "^{ENTER}"
Application.OnKey "{~}", "^{ENTER}"
Application.OnKey "{ENTER}", "^{~}"
Application.OnKey "{~}", "^{~}"
End Sub
と記述してもうまくいきません。
何か方法がありましたら、どなたか教えて下さい。
EnterKeyBehavior
771デフォルトの名無しさん:04/01/17 22:40
こんばんわ。

あの質問よろしいでしょうか。


Excel−VBAですが、
この画像を見てもらえますか。
http://www.geocities.co.jp/SiliconValley-Oakland/3559/excel_vba_01.JPG

あと、このサイトの画像を見てもらえますか。
http://www.moug.net/skillup/svbm/ya03-1.htm
http://www.moug.net/skillup/svbm/img_ya/ya03-2.gif

自分のVBAに「VBA WinAPI ビューア」がアドインされないんですが、
アドインする方法を教えていただけますでしょうか。

ちなみに、持っているのはOfficeXP-Developperです。
よろしくお願いします。
>>771
declare 目的のWinAPI名

で、ググればそれ相当の情報が得られますが。
アドインマネージャーには表示できてるの?

表示できていれば選択してロード方法のところにチェック入れてやるだけのはずだけど。
774771:04/01/18 00:48
>>773
このとおり、表示されてないのです。
http://www.geocities.co.jp/SiliconValley-Oakland/3559/excel_vba_01.JPG

OfficeXP DeveloperのCDをインストールしたんですけどね。
なんでだろう・・・。

誰かわかる方いますか?
ttp://www.microsoft.com/japan/msdn/columns/office/office03082001.asp
によれば、APIビューアのインストール方法は
apiload.txt
ってファイルに書かれているらしい。
CDにそれっぽいファイルがないか見て。
776769:04/01/18 10:16
>>770
出来ました。
新たな方法として、キャラクターコード13をクリップボードに入れてからペーストする方法を
とっていたんですが、この方がスマートですね。
有難うございました。
777762:04/01/18 10:25
>>763
>>764
レス遅くれてゴメン、どうもありがとう。



























779デフォルトの名無しさん:04/01/18 20:19
A個の中からB個取り出す組み合わせを全部表示させるには、
どうしたらよいのでしょうか?
さらにその組み合わせに確率の高いほうから上位何個まで
といった条件を反映できるようにしたいのですが。
>>779
一応聞くがパスワード区落下とかメールアドレス作成ツールとか、そんなん?
>>779
まずは日本語からやり直せ。
VBA以前の問題だ。
782779:04/01/18 20:44
いえ、ただの数字の組み合わせを出したいだけです。
説明不足ですみません。
>>779
出現確率はすべて等しいので上位も下位も無い。

  〜終了〜
784779:04/01/18 21:02
>>783
確率はある特殊な計算でだしています。
>>784
組合せも、ある特殊な計算でだします。


目の前は生きる意味がない・・・

豚どもの戯言はもう聞きあきた・・・

俺にはもう未練はない

俺にはもう大切に思える人もいない

さぁ、一緒に旅立とう

黄色い鴉が僕らを待っている
>>786
このレスも、ある特殊な計算でだします。
>>779
VBA必要ない

数字の組み合わせだけでなら0から10^B-1までの値をオートフィルでつくれ。
上位が欲しいなら計算した確率にソートかけれ。
789788:04/01/18 23:37
10^(B+1)-1のまちがい
790デフォルトの名無しさん:04/01/19 10:46
vb.netを使って、Excelオブジェクトを操作し、
ワークブック(ワークシートのセル)に対して、データの流し込みをやっています。

こんど、ワークブックにたいして、vb.net側で作成したVBAマクロを
流し込むよう依頼が来て、ほとほと困っております。

Application.RecordMacroなるメソッドを利用するのかと思いますが、
一切流し込めていません。

なにか、いい方法をお持ちのかた、情報をくださいませ!
無理
792790:04/01/19 12:56
>>790

事故レス、ですわ。

なんか、ExcelへのVBAソースの流し込み、出来そうです。
http://support.microsoft.com/default.aspx?scid=kb;ja;303871
http://support.microsoft.com/default.aspx?scid=kb;EN-US;282830

サンプルも動いています。上のURLの通りに実装してエラーが出る場合は、
下のURLを参照してみるといいと思いますです。


>>791
VBE使えばできますよ。
794769:04/01/20 12:42
以前質問した者です。
また質問させて下さい。
今、ワークシート上にテキストボックスを配置しているのですが、テキストボックス内では
右クリックをしても何もメニューが出ません。
コピー、切り取り、貼り付けだけでよいので出来るようにしたいのです。
右クリックしてメニューさえ出来るようになれば、後の方法は分かるんですが・・・。
下記の様に記述してもエラーが出ます。(貼り付けの例です。)
どなたか、教えて下さい。

Set my_button = Application.CommandBars(TextBox1).Controls.Add _
(Type:=msoControlButton, ID:=370, Before:=4, Temporary:=True)
With my_button
.Caption = "paste"
.OnAction = "paste"
.BeginGroup = True
End With
Set my_button = Nothing
795デフォルトの名無しさん:04/01/21 01:06
VBAというかExcelに絡む話なのですがExcelの方のスレでは回答が得られなかったのでこちらで質問します。

Excel 2000 OS:Windows2000
Excelで図を挿入してその上にオートシェイプで矢印や図形を描画すると印刷プレビュー時にずれて表示されます。
この現象を解決する方法はないのでしょうか?
ずれない時とずれる時があり、いまいち規則性が掴めません。
※XPでも印刷時に図形はずれると聞きました。

Excelで印刷位置の調整や印刷時に画像のフォーマットを変更ということはマクロで制御できるのでしょうか?
>>795
>VBAというかExcelに絡む話なのですがExcelの方のスレでは回答が得られなかったのでこちらで質問します。

無駄な抵抗かと。
ほれ。
あとは自力でやれ

Sub AddBar()
 CommandBars.Add "CustumMenuBar", msoBarPopup, False, True
 With CommandBars("CustumMenuBar")
   .Controls.Add Type:=msoControlButton, Temporary:=True
  .Controls(1).Caption = "CUT"
  .Controls(1).OnAction = "TextBoxCut"
  .Controls.Add Type:=msoControlButton, Temporary:=True
  .Controls(2).Caption = "COPY"
  .Controls(2).OnAction = "TextBoxCopy"
  .Controls.Add Type:=msoControlButton, Temporary:=True
  .Controls(3).Caption = "PASTE"
  .Controls(3).OnAction = "TextBoxPaste"
  End With
End Sub

Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
 If Button = xlSecondaryButton Then
   CommandBars("CustumMenuBar").ShowPopup
 End If
End Sub
798質問です:04/01/21 22:40
Dim T As Integer, U As Integer, V As Integer
上のように3つの変数を定義して、
これら3つにさらに「ただしT<U<Vである」という条件を加えるには
どうしたらいいでしょうか?
「T<U And U<V」と書くと「コンパイルエラー」が出てしまいます。
799デフォルトの名無しさん:04/01/21 23:15
VBAでシートを新規作成するにはどうしたら良いでしょうか?
いろいろ検索してみたんですが、見つからなかったので教えてください。
お願いいたします。
>>798
それだけしか書いてないじゃエラーになるのは当然だな

>>799
シートのメソッド見れば分かるだろうに
>>799
Sheets.Add
802798:04/01/22 00:32
>>800
ではあと何を書き加えればいいのでしょうか?
>>803
その条件をどう使いたいか記述する。
IF 文の中で使うなら IF 文を書く。
WHILE や UNTIL で使うなら LOOP の処理を書く。
>>795
もしかしてMSのドライバ使ってない?
プリンタのドライバをアップデートしてみたら?

>Excelで印刷位置の調整や印刷時に画像のフォーマットを変更ということはマクロで制御できるのでしょうか?
位置の調整はできると思うけど「ずれている」という判断はできないのでは?
フォーマット変更は貼り付ける前にするから効果があるのであって、印刷時に変換できたとしても意味無いと思われ
805デフォルトの名無しさん:04/01/22 12:53
セルの値が数字の場合ある処理をすること(例えばセルの色を変える)
は出来るのですが、
セルの値が"m1"のようなアルファベットとの複合型の場合になると
うまくいきません、助けてください。
806デフォルトの名無しさん:04/01/22 13:51
805です。スミマセン、初歩的なミスを犯してました…
逝って来ます。
807デフォルトの名無しさん:04/01/22 21:36
Excel97のVBAで、http://〜上にあるCSVファイルを読みとって
配列に格納したいのですが、なんかいい方法あるでしょうか?
質問の意味が分からん。
URLそのものがCSVになっていて、それを配列に格納したいのか?
「いい方法」があるか聞いているのは、すでに方法を思いついていているがそれよりも良い方法をしりたいのか、
全くわからんDQNが方法を一から教えてもらいたがっているのかどっちだ?
809デフォルトの名無しさん:04/01/22 23:40
>>808
すまんです。
現在、社内ネット上の例えば
http://shanai-server/hoge.csv にあるCSVファイル(実際にはCSV形式のテキストを吐き出すCGI)を
Workbooks.OpenText FileName:="http://www.foo.bar/baz.csv"...
を使ってデータを読みこんで処理するVBAを書いてます。
しかしこの方法だといったん新しいブックに内容が書き出されてしまいますので、
VBAで適当に定義した構造体の配列か、Variantの2次元配列等にダイレクトに
情報を格納してしまいたいのです。エクセル自体にそういう機能があればよいのですが
APIかなんかを呼び出すしかないですかね?
エクセルはバージョン97を使っていて、追加のDLL等を配布するのは面倒なので
標準の機能で解決したいのです。
810デフォルトの名無しさん:04/01/22 23:41
↑二つ目のURLまちがえました。最初のやつと一緒です。
>>809
標準では無理。
812名無しさん@_@:04/01/23 02:20
すいません。初心者ですが
この意味を教えてください。

できれば一行ずつお願いします。

WS1.Cells.ClearContents
NWS.Range(Cells(1, 1), Cells(mr, 6)).Copy Destination:=WS1.Cells(3, 1)
Workbooks(ko & ".txt").Close savechanges:=False

よろしくお願いします。
>>812
ws1の範囲削除
NWSのとある範囲をコピー
ko&".txt"を保存しないで閉じる。
814デフォルトの名無しさん:04/01/23 08:51
>>809
97はWEBクエリなんて物は無いんだっけ?
まぁ、結局は隠しシートとか使うことになるだろうけど.....
815名無しさん@_@:04/01/23 09:54
>>813

ありがとうございます。
816時間比較:04/01/23 14:47
手入力にセルで"8:00”と入力します。
それと、TimeSerial(8,0,0)を比較した場合に同じ値として扱われません。
これは誤差でしょうか?

また、時間の比較をする場合に"8:00"と入力されたセルが8:00以上かどうか比較する方法でスマートな方法ないでしょうか?
誤差の影響がないように比較したいのです。
よろしくおねがいします。
エクセルにて保存コモンダイアログを使いたいのですが、
どうしたらいいかわかりません。

Set obj = CreateObject("MSComDlg.CommonDialog")
With obj
.Filter = "All Files (*.*)|*.*"
.MaxFileSize = 256
.CancelError = False
.Showsave
End With
ファイル名 = obj.Filename
Set obj = Nothing
こんな感じでやったら、できるPCとできないものが出てきました。
オフィスXPはできてオフィス2000ができませんでした。
オートメーションエラーです。
指定されたモジュールが見つかりません と出てしまいました。
非常にこまってます。他にいい方法 APIとかもしくはこの現象の解決方法がありましたら。
ご教授お願いします。
>>817
GetSaveAsFilename 使ってみれ

経験談より
819817:04/01/23 20:24
>>818さん
あっさりと解決できました。ありがとうございました。
実は、getopenFilename も最初にテストしてて、保存用があるはずだ!
と思ってやっていたけどわからなかったんです。
有難うございました。
820デフォルトの名無しさん:04/01/24 01:44
選択した領域のRangeオブジェクトに含まれているセルを1つずつ参照した
いのですが、どうすればいいですか?
セルの数はCountでわかりますが、離れた複数の領域かもしれないので、
Rows.Count,Columns.Countは使えません。
>>820
イテレータは?
822デフォルトの名無しさん:04/01/24 09:55
>821
うまくいきました。
ありがとうございます。
823デフォルトの名無しさん:04/01/24 15:02
教えて下さい。
シート上に改行可能なテキストボックスを配置しています。
このテキストボックスから、1行づつ文字を取り出したいのですが方法が分かりません。
行数等は分かるので(linecount)、各行のバイト数か文字数が分かればいいのですが…。
どなたか、御願いします。
>>823
改行コードで見るのは駄目か?

String = Mid(TextBox1.Text, 1, InStr(TextBox1.Text, vbCrLf))
な感じ?
825794:04/01/24 16:41
>>797
有難うございました。
出来ました。
また、何かありましたら御願いします。
>>794で後の方法は分かると書いておきながら質問しにくるな。
あまつさえまただと、おまえ甘えすぎ
828デフォルトの名無しさん:04/01/25 00:27
Excel VBAを書いているとよくファイルがぶっ壊れるんですが、俺だけですか?
特に、ユーザーフォームやコントロールツールボックスを
使っているときに頻発するんですが。
Excel使ってるとよくパソコンがぶっ壊れるのですが、俺だけですか?
>>829
だと思います。
831デフォルトの名無しさん:04/01/25 13:06
VBど初心者です。申し訳ないですが、ブロックIF文を使って1000までの
素数を出力するにはどういうプログラムにすればいいんでしょうか・・・。
さっぱり訳がわかりません・・・。お願いします。
>>831
遅くて良いならカウンタ変数iが(i - 1)〜2で割り切れないと素数。
833831:04/01/25 20:41
>832
ははあ、なるほど、どうも。うーん、ただ整然と並べて出力がうまくできないんです
よねえ。まあなんとかがんばります。
834デフォルトの名無しさん:04/01/26 00:34
エクセルマクロを起動するとき
スプラッシュウィンドウでオープニングを飾りたいのですが
(PhotoShopの起動時みたいな)
頑張ればできるのでしょうか?
無理なのでしょうか?
別途、外部DLLをインストール等は面倒になるので
それはしないで実現したいです。
>>834
スプラッシュシートにすれ
>>834
auto openとユーザーフォームで良いんでは?
>>809
IEControl使えば。

>>816
うちの環境では同じとみなしたけど。
838デフォルトの名無しさん :04/01/27 01:59
学生点数
166
298
375
475
583
655
758
883
975
1098
1166
1298
1375

0-59点 
60-69点 
70-79点 
80-89点
90-100点

最高点 
最低点 

スイマセン 点数の範囲に人数、最高点最低点は点数を出したいのですが、コレはどのようにやればよいのでしょうか?
繰り返し処理とかでしょうか?
教えてください。
学生 点数
1 66
2 98
3 75
4 75
5 83
6 55
7 58
8 83
9 75
10 98
11 66
12 98
13 75

0-59点 
60-69点 
70-79点 
80-89点
90-100点

最高点 
最低点 

スイマセン 点数の範囲に人数、最高点最低点は点数を出したいのですが、コレはどのようにやればよいのでしょうか?
繰り返し処理とかでしょうか?
教えてください。

SUMIF MAX MIN
>>840
ありがとう御座います
助かりました
842デフォルトの名無しさん:04/01/28 00:35
Excel2000でVBAからOracleに接続してDBから値を取得したいのですが
oo4oというのとADOのどちらのライブラリを使えばいいでしょうか?
ExcelはクライアントPC(Windows2000)でOracleは別のWindows2000に入れる予定です。

サンプルのソースを見ても何処にマシン名(IPアドレス?)、データベース名、ユーザ名、パスワードを記述するかわかりません。
>>842
> サンプルのソースを見ても何処にマシン名(IPアドレス?)、データベース名、ユーザ名、パスワードを記述するかわかりません。

そんなんでは、正直何使おうと無理ポ。
844名無しさん@_@:04/01/29 03:07
教えてください。

変数b =15
セルA =50 
セルB =10

セルB は、セルAより小さくて変数bよりも小さい時は、1
違うときは0と返したいのですが

IF(AND(A>b>B)1,0)

この式でいいのでしょうか?

うまく値が出ません、よろしくお願いします。
798=844か?

> IF(AND(A>b>B)1,0)
> この式でいいのでしょうか?

駄目だから意図した答えが出ないのだと思うけど
人に聞く前にイルカに聞いてみたらどうかな
「条件付きの実行について教えて」って

ほんでもってセルAとかBとかってなんだ?
名前定義して無いならExcelにはそんなもの無いぞ

もしかして釣りですか?
>>844
ここは VBA スレッドだから、関数の使い方なら
このあたりで聞いてみたら?
http://pc2.2ch.net/test/read.cgi/bsoft/1073895316/l50
http://pc2.2ch.net/test/read.cgi/pcqa/1071336981/l50
847デフォルトの名無しさん:04/01/29 17:46
縦に長いシートを印刷する際に
ブランクになっている行を切り詰めて印刷したいのですが上手くいきません

流れとしては
If文で選択した行がブランクかどうかを判別

ブランクでなければActiveSheet.PageSetup.PrintAreaを使ってセルをアクティブにする

For文でこの作業をシートの上から下まで繰り返す

アクティブなセルを印刷用のSubに送る

このように考えています
何かよい方法があったら教えていただけますでしょうか

よろしくお願いします
848844:04/01/29 19:47
>>845 846

済みません解決しました。
849デフォルトの名無しさん:04/01/30 05:15
エクセルVBAで作ったプログラムがシート数8、650KBのファイルになったわけですが、
起動に1分半かかってしまいます。つまり、異常に時間がかかってしまいます。
起動時間を短縮する方法があるとすれば、どのあたりでしょうか。

そもそも、起動に時間がかかるということが、
どういうことなのか解かっておらず、見当がつきません。
起動時にコンパイルされて、時間かかってるとか?
素人なものですみません。
あとは、確保するメモリを減らすことくらいを考えていますが。

何かヒントあれば教えて頂けますでしょうか。お願いします。
>847
オートフィルタで「空白以外のセル」を抽出して印刷じゃダメ?
851デフォルトの名無しさん:04/01/30 09:41
エクセルにアドインで追加した、メニューとツールバーがあるのですが、
これらを実行するときに、パスワードを入力させるようにしたいのですが、
何か良い方法がありますでしょうか?
852デフォルトの名無しさん:04/01/30 13:25
>>851
無理っぽい?
853デフォルトの名無しさん:04/01/30 13:31
VBA程度でさえも習熟できないバカがいるのか、この板はw

854sage:04/01/30 14:47
ぅんぅん
使ったことないとかんたんだよね
855デフォルトの名無しさん:04/01/30 18:06
エクセルで、ある特定のメニューやツールバーを無効化(選択できなくする)することってできますか?
856デフォルトの名無しさん:04/01/30 20:17
できる
857デフォルトの名無しさん:04/01/31 17:16
Excel97を使っています。
エクセルではあるセルを選択するとそのセルがデフォルトで
黒い枠で囲まれますが、この色を変える or 消すことはできるのでしょうか?
また、WebでいうOnMouseover等のイベントはありますか?
858デフォルトの名無しさん:04/01/31 19:09
エクセル97で、シート上の図形を拾い出して、
図形それぞれを保存するといったことをしたいのですが、
97持ってなくて、XPで調べたらshapesとかを使えば良さそう
ということまでは分かりました。
しかし、97で使えるのか、また、保存はどうしたらいいのか
分かりません。
どなたか教えて下さい。
>>858
shapesは97でも確かあったよ。
いま2000しかないから確認できないけど、あったはず。
ちなみに95だとない。
860デフォルトの名無しさん:04/01/31 19:39
>この色を変える or 消すことはできるのでしょうか?

多分、できない。

>WebでいうOnMouseover等のイベントはありますか?

JavaScriptのOnMouseoverと同じことはできます。
>>860
>JavaScriptのOnMouseoverと同じことはできます。
わお、おしえてくだされ m(__)m
862デフォルトの名無しさん:04/01/31 20:13
ごめん。セルの表示をマウス乗せるだけで変えるのは、多分できない。
ユーザーフォームと勘違いした。
にわか喜びさせてすんませんでした。
863857:04/01/31 20:17
>>862
ざんねん。。
864デフォルトの名無しさん:04/01/31 21:56
エクセルでDBからデータを吸い出すマクロを書いています。
実行時間が長かったりすると、エクセルが画面蒼白になってしまい
ちょっと(かなり)キモイです。
プログラム走っている間は画面書き換えがされないのでしょうが、
エクセルのマクロってこういうものなんでしょうか?
プログレスバー付きのダイアログかなにかオープンして
「ちょっとまっててね、うふ」的なことをやりたいのですが
みなさんはどう対処されていますか?
>>864
たしなみとしてDoEvents
>864
Application.ScreenUpdatingをFalseにして描画を止めるか、
逆にDoEventでこまめに描画を更新すれば、キモイ度は減る。

867864:04/01/31 22:28
>>865,866
ありがとうございます。
DoEvents試してみます。
868デフォルトの名無しさん:04/01/31 22:49
Range("A1:C1") = Array(1,2,3) で
一気にセルに代入できるじゃないですかぁ。
そいで「おっしゃぁ!」と思って
Range("A1:C3") = Array(Array(1,2,3),Array(4,5,6),Array(7,8,9))
としたのですが、なにも入ってくれません。
あんで??

配列のポインタをセルに代入しようとしてるからだろ
Arrayで多次元配列が作れるわけじゃない
870デフォルトの名無しさん:04/02/01 08:38
教えてください。

WinME + エクセル2000 の環境です。

webのjavaアプレットで開くテキストだけのウインドウ "books"に対し、
クリップボードに内容をコピーさせて、エクセルに貼り付けしたいのですが
ちなみにウインドウ "books"は最初から全選択状態になっています。

Sub test()

AppActivate "books"

SendKeys "^(c)"

Application.ActiveSheet.Paste

End Sub

ではうまくいきません。



Sendkeysのヘルプの一番下に、

>Sendkeys ステートメントは、アプリケーションに Copy キーを渡せません。

となっていますが、そのせいでしょうか・・・

やはり、VBAでoffice以外の外部アプリを操作するのは無理ですか?

教えてください。
>>870
Javaっってクリップボード使ったっけ?
872デフォルトの名無しさん:04/02/01 10:38
>>871

870です。

javaアプレットにより、別ウインドウが作成され、そのウインドウのデータをウインドウズユーザーが
ctrl + c で普段はコピーしていたのを、
エクセルに自動で行わせたいという意味なのですが。

説明不足ですいません。
873デフォルトの名無しさん:04/02/01 11:10
EXCEL XP でシート上にコマンドボタンを貼り付け、
下記のようなコードを書きました。

Private Sub CommandButton1_Click()
' カーソル変更
Application.Cursor = xlWait

(いろんな処理)

' カーソル戻す
Application.Cursor = xlDefault
End Sub

しかし、他のオブジェクトにフォーカスがあるときに押すと
どういうわけかカーソルの形が戻らず困っています。
マウスを動かせばカーソルは戻っているので、EXCELのバグだとは思うのですが
強制的にマウスカーソルを再描画させるような技ってあるのでしょうか?
>>873
Windowsの仕様的には正しい気もしますな。
(OnMouseMove前に再描画)。

screenupdate描画禁止->描画許可で再描画が起きるような起きないような。
875デフォルトの名無しさん:04/02/01 12:22
>>869
まじ!?

Dim arr(1 To 3, 1 To 3)

arr(1, 1) = 1
arr(1, 2) = 2
...
...
arr(3, 2) = 8
arr(3, 3) = 9

Range("A1:C3") = arr

と書くのはかなりダサイ気がするのだが?(配列要素を1個1個初期化する辺り)
そーするしかないのけ?
>>875
取りあえずループ使えば?
後、処理的にはこっちの方が素直で配列一気代入なんて方がキモいとされています。


>>869
どうでも良いけどポインタとか言うのやめれ。

>>876
代入するものが数値とか、計算で出てくるものならループで回してもいいんだけど
文字列とかの場合ってループで回らないじゃない?
一個一個書き連ねるのも書いてて疲れるし、コード見ても見づらいし
そういう時さ、なんだかなぁ。。と思ってしまうわけさ。
まあ、1行毎なら = Array()で入るからいいんだけれどね。
>>877
文字列リテラルを配列に入れといてそのインデックスを使えば良し。

>後、処理的にはこっちの方が素直で配列一気代入なんて方がキモいとされています。

クラスのコンストラクタに引数渡せないのも
このへんの感覚から来ているのか!? >MS
>>878
??
MID$とか介して他の配列に入れ直すわけ?
881873:04/02/01 13:16
>>874

おお、下記の行を追加したらマウスカーソルが元に戻りました。

Application.ScreenUpdating = False
Application.ScreenUpdating = True

しかも、いろいろ試していたら

Application.ScreenUpdating = True

の一行だけでも大丈夫でした。
ありがとうございました。
>>879
単純に設計ミスじゃない?

OLEオートメーションの制約だったのかも知れんけど
エクセルソフトのStingrayってどうなの?
884デフォルトの名無しさん:04/02/02 14:59
原始的なユーザー定義関数を考えてます。
これを複数のシートに埋め込んで、それぞれのシートの計算値を入れたいのですが
今のところ1つのシートを選択して再計算すると
他のシートにもその結果が反映されてしまいます。
シート毎の値を入れるには、どこを修正すればいいですか?

後、この関数で使用しているnとrも他のセルに値を返したいのですが
また別のユーザー定義関数作らないとだめでしょうか?

よろしくお願いします。

Public Function a() As Integer

Dim r As Integer
Dim n As Integer

n = 0
r = 3
a = 0

Do While ActiveSheet.Range("A" & r).Borders(xlEdgeTop).Weight <> xlMedium And ActiveSheet.Range("A" & r).Borders(xlEdgeTop).LineStyle <> xlContinuous
If ActiveSheet.Range("D" & r).Interior.ColorIndex = 15 Then
n = n + 1
End If
r = r + 1
Loop
a = (n / (r - 3)) * 100
End Function

>>884
出力処理が見あたらないのですが。
ああ、見あたった。
887 :04/02/03 11:33
>>884
テストしていないので、うまくいくかどうかは分かりませんが、

[シート毎に計算させる場合]
(1) Function a() の引数としてシート名を入れるようにする。
  Function a(SheetName As String)
(2) ActiveSheet を Sheets(SheetName) にする。
(3) 呼出すときは =a("Sheet1") のようにシート名を指定する。
(4) Sheet4 に書き込むときは =a("Sheet4") となる。

[戻り値を変える場合]
(5) a, r, n のどの値を返すか指定する引数を追加する。
  変数名が重複して分かりにくいので、関数名を変える。
  Function AHO(SheetName As String, SelectReturn As Long)
(6) a = (n / (r - 3)) * 100 の次にどの値を返すか判定。
  if SelectReturn = 1 Then
   AHO = a
  ElseIf SelectReturn = 2 Then
   AHO = r
  Else
   AHO = n
  End If
(7) 呼出すときは、=AHO("Sheet2", 1) のように引数を2つ指定する。
(8) 第二引数が 1 のときは a を、2 のときは r を、それ以外は
  n を返す。
888デフォルトの名無しさん:04/02/03 19:02
webからデータを取得したいのですが、クエリを使うときのアドレスに任意のセルにあるデータを渡すにはどうすればいいですか?
例えばgoogleで「123」というデータを検索するとき、アドレスはhttp://www.google.com/search?q=123となるわけですが
この123をA1に入っているデータとするにはどうすればいいのでしょうか?
>>888
"http://www.google.com/search?q="&Sheet1.Cells(1,1).Value
890 :04/02/04 00:31
VB.NETでアプリ組むと、なぜかWorkbookBeforeCloseのイベントルーチンで
CancelにTrue入れてやってもブックを閉じる操作をキャンセルできないのですが
なにかこれの対策ってないでしょうか?ちなみにVB.NETのバージョンは2003で
エクセルの方は1つ前のバージョン(2002?)です。
891デフォルトの名無しさん:04/02/04 01:44
セルにページ数を表示したいんですが、どうすれば・・・
892デフォルトの名無しさん:04/02/04 16:42
矢印キーでアクティブになるセルを移動するたびにアクティブなセルの内容を
コピーするというマクロを作りたいのですが

Sub コピー()
'
' コピー Macro
' マクロ記録日 : 2004/2/4 ユーザー名 : AAAA

Do While (True)
Worksheet_SelectionChange ()
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Selection.Copy
End Sub

まではなんとか作ったのですが、Worksheet_SelectionChange ()に引数入れろと
言われます、()には今選択されているアクティブなセル番号を入れたいのですが
どうしたらいいのかわからなくて困ってます。
更にこれだと現在のセルの内容をひたすらコピーすることになってしまう
と思うのです。→で移動するたびにコピーしてくれるようにするには
どうしたらいいでしょうか?
どなたかアドバイスくださると助かります。よろしくお願い致します。
893892:04/02/04 17:28
自己解決しました。
イベント処理のところに記述したらうまくいきました。
VBAは初めてで勝手がわからず、もうだめだと思いましたが
イベント処理したらあっさり完成したので拍子抜けです。
基本的なことを学ばず、いきなりコードを貼り付けて動かすのだから
躓くのは当たり前だと思うのですが、とりあえず上手くいったのでほっと
してます。
どうもお騒がせいたしました。
セルに入っている6桁の数値を年月日と読みたいのですが、どうすればいいでしょうか?
A1に031225と入ってるときB1に2003、C1に12、D1に25となるようにしたいのです。
妙案があればご教授ください。
895デフォルトの名無しさん:04/02/04 18:38
>>894
それって人に質問するような難しいことかなあ。。。
ちょっと自助努力足りなすぎると思うけど。間違い無くヘルプを検索なんて
してないでしょ?

それにそんなのエクセルの関数だけでもできるような気が。
>>895
煽るだけなら黙ってなさいな。
>894
VBAなんて高度なものを使わなくても
MID関数
だけでいけるべ
それともMID関数以外の方法を模索しているのか?
898デフォルトの名無しさん:04/02/06 21:01
すいません。このエラーはどこがおかしいのでしょうか?
初心者なので分かりません。テキストをなぞってるだけなんですが。
教えて君で申し訳ありません。
Option Explicit

Type UserDataType
Name As String
Age As Long
Address As String
End Type


Sub Sample4_37()
Dim UserData As UserDataType
UserData As UserDataType
UserDataType.Name = "田中麻沙美"
UserDataType.Age = 13
UserDataType.Address = "横浜市保土ヶ谷区"
MsgBox UserDataType.Name & vbCrLf & _
UserDataType.Age & vbCrLf & _
UserDataType.Address
End Sub

オブジェクト モジュール内では、パブリック ユーザー定義方は定義できません。
Type UserDataType

Private Type UserDataType

COMオブジェクトは外部に構造体(の型)を公開するなんて機能はないというお話。
>>898
Sub 以下は、ほんとはこうしたいのではないか?

Sub Sample4_37()
Dim UserData As UserDataType
UserData.Name = "田中麻沙美"
UserData.Age = 13
UserData.Address = "横浜市保土ヶ谷区"
MsgBox UserData.Name & vbCrLf & _
UserData.Age & vbCrLf & _
UserData.Address
End Sub
麻沙美タン、(;´Д`)ハァハァ (^^;
902デフォルトの名無しさん:04/02/08 21:50
最近VBA覚え始めた初心者ですみませんが・・・
:=
↑この演算子ってなんですか???
>>902
名前付き引数への代入
Array関数で一括セル参照するのと
変数 = Range("XX") を必要に応じて繰り返すのは
どっちがウマーでつか。速度的には変わらんような
905デフォルトの名無しさん:04/02/10 00:06
シートに貼ってある図(絵)をBitMapで保存する方法を
おしえてくれくれ。
シートの中で同じ文字列の出てきた回数とその文字列を返すような
関数ってありますでしょうか?文字列の出てきた回数ごとに色を
つける処理をさせたいと思ってます.
>>906
統計系関数で無いの?そんなの。
>>905
画像を右クリックでクリップボードにコピー。
MSPAINT などの画像ソフトに貼り付け。
BMP 形式で保存。
910906:04/02/10 00:34
>> 906さん

ありました.countifでなんかできそうな感じなんですけど,
第2引数はセルの値をかたっぱしから入れってて調べないといけない
のでしょうか?
911デフォルトの名無しさん:04/02/10 04:21
質問です。
タブ区切りのテキストファイルがたくさんあって、それを処理したいんですが、
開いてから保存しようとすると確認のダイアログが出てしまいます。
このダイアログを出さないで元のファイルに上書きするにはどうすればいいんでしょうか。
SaveとSaveAsを両方やってみたのですが、うまくいきません。
>>911
Application.DisplayAlerts = False
913905:04/02/10 09:10
す、すまん
VBAでだす。
914デフォルトの名無しさん:04/02/11 00:20
Excel2000で、シートに貼り付けたボタンを削除する処理をデバッガで動かすと、
「中断モードのため入力できません」というエラーダイアログが出ます。
(継続するとボタンの削除には成功しますが、他のシートの変数が初期化されたり、
不具合が出てしまいます。)
このエラーを回避する方法を教えて下さい。お願いします。


ActiveSheet.Shapes("CommandButton1").Select
Selection.Delete   ←ここにブレークを張って、ステップした時に出る。
そういった不具合が発生するからエラーで教えてくれてる。
それを無視してるんだから当たり前。

通常使うときにはブレークさせないんだから回避する必要なんて無い
>>915
屁理屈はイイから外に遊びにいっといで。
917914:04/02/11 17:43
>>915
通常使う時に、他のシートの変数が初期化されてしまうのが問題です。
その原因を探るためにデバッガで動かしました。
ワークシートでコントロール貼ったり削除するとワークシートクラスはリセットされる。
マクロだろうが手動だろうが同じ。

どうしても消さないといけないなら処理途中はVisible=Falseにしておいて
終了処理のときに消せばいい
919914:04/02/11 21:02
>>918
なるほど。助かります。ありがとうございました。
920デフォルトの名無しさん:04/02/12 09:50
セルの下に「罫線が引かれているか」という状態を判定したいのですが、
これってどこのプロパティをみればいいんでしょうか・・・・
>>920
マクロ記録で罫線を引いてみれば、どのプロパティを見ればいいかすぐにわかるよ。
922デフォルトの名無しさん:04/02/12 17:20
Excel2003で、チェックボックスを以下のコードで作成しました
ThisWorkbook.Worksheets("main").OLEObjects.Add "Forms.CheckBox.1", Left:=20, Top:=200, Width:=150, Height:=20
このチェックボックスのキャプションを変更したいのですが、どうしたらいいのでしょうか
923922:04/02/12 17:37
すみません
Worksheets().OLEObjects().Object.Caption
で変更できました・・・
924デフォルトの名無しさん:04/02/13 17:08
どなたか教えていただけないでしょうか?

マクロを実行しているファイルのパスを
知るにはどうすればいいのでしょうか?
ThisWorkbook.Path
パス
928デフォルトの名無しさん:04/02/16 21:48
ユーザーフォーム上にテキストボックスを多数配置してあります。
テキストボックスの名前が"TextBox1"、"TextBox2"というように
"TextBox"のあとに数字がついているような状態で存在する場合
TextBox1〜TextBox100に対し一度に値を
入力する方法を教えてください。
>>928
コントロール配列とかあったっけか?
Object型の配列にぶちこんだら何とかなりそうな気もする。
て言うか設計やり直せ。
>>928
Dim ctl As Control
For Each ctl In Me.Controls
 If InStr(ctl.Name, "TextBox") > 0 Then
  ctl.Object.Text = "HogeHoge"
 End If
Next ctl
931928:04/02/16 22:44
>>930
ありがとうございます。
できなかったら1文ずつ入力する覚悟でした、助かります。
932924:04/02/18 17:00
>>925,927
ありがとうございます。
pathでしたか・・
wordなのでActiveDocument.Pathってやったら出来ました!
933デフォルトの名無しさん:04/02/19 18:17
お助けください。
ファイルの「上書き保存」と「ファイル名を変えて保存」をできないようにする方法ってありますか?
934デフォルトの名無しさん:04/02/19 18:41
>>933
ない
>>933
BeforeSaveイベントでCancel=True
突然のメール失礼致します。

お宝どっさり!
元気の源はここにあります。

http://www.geocities.com/officemacmac/


安心してご利用できる様にスタッフ一同お待ちしております。





配信停止の方は下記まで

[email protected]
937デフォルトの名無しさん:04/02/20 02:02
>>934
ありがとうございました。
938デフォルトの名無しさん:04/02/20 02:39
>>935
ありがとうございました。
Cancel=Trueでアクションを無効にする方法も検討してみます。
939デフォルトの名無しさん:04/02/21 12:30
Excel VBAを使って、Webにアクセスしようとしていますが,
submitのところでつまづいています.
htmlタグが,

■HTML
<input type="submit" name="NAME" value="ZZZ">

であれば,

■VBA
Dim myIE as InternetExplorer
Set myIE = new InternetExplorer
With myIE
.Visible = True
.Navigate "URL"
.Document.all("NAME").Click
.Quit
End With
Set myIE = Nothing

でいけることは分かったのですが,

■HTML
<INPUT TYPE="SUBMIT" VALUE="1" ACCESSKEY="1">

のような、nameの指定がないとき、「.Document.all("NAME").Click」部分を
どのように記述するとsubmitできるのかがみつけられません.
どなたか教えて下さい.よろしくお願いします.

あとWebへのアクセスについてイロイロ書いてある本があったら
紹介してホスィです。
>>939
単になんかのCGIにデータをPOSTしたいだけなのか、それとも既存のhtmlフォームへの入力を自動化したいだけなのか。

確かDOMの要素って名前の他に序数でもアクセスできなかったっけか。
941デフォルトの名無しさん:04/02/21 12:51
即レス サンクスです
やりたいことは、
>既存のhtmlフォームへの入力を自動化したい
です。(ゆくゆくは、cgiへのpostもやりたくなると思うのですが..)

VBAにて
.Document.all(1).Click や
.Document.all("1").Click 
等も試してみたのですがダメでした.

前者は、見た目、素通り(何事も無いように次のステップへ)、
後者は、オブジェクト変数または withブロック変数が設定されていません
のエラーが返ってきます.

手探りでいじっているのですが、なかなか上手くいかないもので..
942デフォルトの名無しさん:04/02/21 20:55
>>939
こんな感じでいかがでしょうか。
'test.vbs
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate "URL"
Set test = objIE.Document.all.tags("INPUT")
For Each x In test
if x.type = "submit" and x.value = "1" then
x.click
exit for
end if
Next
私はここで勉強しました。
ttp://www.ken3.org/
943デフォルトの名無しさん:04/02/21 21:40
ありがとうございます。

vbsちょうど先週から始めたばかり..といいつつ実行してみたのですが、
エラーが返ってきてしまいました。俺、まだ何もわかっていないっぽ
もうちょっと勉強したら、もう一度見直してみます。
vbsもあわせられればもっと便利になるんだろうな..

でも、書いていただいたリンクで解決できました!
NAMEの指定がない場合は、

.Document.all("NAME").Click  の部分を
.Document.forms(0).submit   に変更でうまくいきました。

これが多分、>940さんの序数での指定方法かなと思いました。
改めて、>940さん、>942さん、ありがとうございました。
VBA自体もやっと初心者の出口にきたかなというトコロなのですが、
エクセルの枠の外のモノが動いたことに感動です(*´∀`*)
944デフォルトの名無しさん:04/02/24 12:14
ボタンを押したときにセットする数値をモメンタリで制御したいと
考えております。

・ボタンを押している間:1
・ボタンを押さない間:0

このようなことはVBAマクロで可能でしょうか。
                  ↓>>1-944

       (  ::::::::::::::::::::::::^:::::::::: :::::: :(
     丿::::::::::::::::::::::::::::::::::::::::::::::::::::: :::: (
     /::::::::::/ノ::::::::ノ::::::::ヽ:人::::::::::ヽ::::::::::)
     (::::::::::/  ):::ノ::::ノ ) ソ ヾ::::::::::::丶ヽ
    (:::::::::/ 彡  ノ   ノ  :: 彡:/)) :::::::)
   (::::::::::/彡彡彡彡彡   ミミミミミミミ ::::::::)
   ( :::::::// ̄ ̄ ̄ ̄ヽ===/ ̄ ̄ ̄ ̄ヽ |::::::)
    | =ロ    З  ‖ ‖  З  ロ = |
    |:/ ‖    / /ノ  ヽ \     ‖ ヽ|ヽ
    /|/  ヽ`======/  ⌒ ` ========ノ   | |
   (||         .(● ●)          |ノ
    |         : :: :::l l: ::: :::          |
    |      _:: :二 M二__::::::.. .        |
    |     : ::: : ::: ::  ===  ::: :: :: ::::     )
    \ :::   :::::::::::  ::::::::::  ::::::::::::::   /|
    /|ヽ  ヽ:::: _- ::::: ⌒:: :::::::: -_   ノ
   / || 丶\_::_:::::_:::: :::::_/:::: /
      | | \ \ ::::::::::: :::::::::: ::: :: _/
   / ̄\ 丶  ̄ ̄ ̄ ̄ ̄ ̄ ̄   
>>944
KeyDown,MouseDownイベントで1を入れて
KeyUp,MouseUpイベントで0を入れればいい
>>946
mouseupが発生すれば良いな。
948944:04/02/25 11:56
>>946,947

ありがとうございました。
実装できました。
949超初心者:04/02/25 16:00
すいません テクニックを教えてください。
エクセルのマクロに ある関数を作りまして
シートのセルから フォーカスが別のセルに移った時に
この関数を呼び出ししたいのですが どなた様かおしえてください
950デフォルトの名無しさん:04/02/25 17:34
>949

シートモジュールの、セレクションチェンジイベントプロシージャを使えばよろし。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'ここにプロシージャの名前を書こう。
End Sub
951超初心者:04/02/25 17:58
>>950
解りやすい説明をありがとうございました。無事解決しました。
952甲羅のカメ:04/02/25 19:25
16進数の"E291"を10進数に変換して"58001"を表示させたいと思っています。
Val関数を使って変換させるのだと思いますが、Val("&hE291")とすると"-7535"になってしまいます。
なにか良い方法はあるのでしょうか?
教えてください。
HEX2DECでHELPしてみ
954カメ:04/02/25 22:20
どうもありがとうございます。
さっそく明日に試してみます。
955デフォルトの名無しさん:04/02/26 09:03
教えて君で申しわけないのですが、
Do Loopを記述してデバックは、無いのに
処理が何も起こらないのです。
下記のコードの何処がおかしいのでしょう?
Sub Sample4_64()
Dim cnt As Long, i As Long
i = 1
Do While Cells(i, 1) <> ""
i = i + 1
cnt = cnt + 1
If cnt > 1000 Then
MsgBox "1000回処理したので処理を中止します"
Exit Do
End If
Loop

End Sub

セルになにも書いてないんじゃね?
957955:04/02/26 10:58
>>956
すいません。初心者なんで・・・。
著書ではセルAに123と書いてあって、1000回処理してるみたいです。。
真似してみましたが、わかりません。
例えば、何を書けばいいのでしょう?
958955:04/02/26 11:08
>>956
ファイルをうpしますから、教えて君で申しわけないですが
良かったら、教えてください。
名前は955としておきました。
ttp://ptba2.hp.infoseek.co.jp/cgi-bin/up/bbs.cgi
959955:04/02/26 11:15
こんな初心者なのでダウンロードしてもウィルスとか入れてないです。
てか、作れません。
なにがしたいマクロなのか、よくワカランが
A1〜A1000までにテキトーになんか書いて実行してみそ
961デフォルトの名無しさん:04/02/26 13:55
渡された文字列が、数字であるか否かを
判断する方法を、諸賢方、教えてくだされ。
isnumeric?
http://pc2.2ch.net/test/read.cgi/tech/1069530956/408-409n
どなたかお助けを_| ̄|○
964デフォルトの名無しさん:04/02/26 20:14
Excelじゃなくて、PowerPointのVBAなんですが、
CreateTextFileでUnicodeをTrueにしてファイルを作ると、
UTF-16で出力されます。
そうじゃなくて、UTF-8で出力することはできるでしょうか?
後から変換かけるんじゃなくて、VBA内だけでできると嬉しいのですが。
WindowsでUnicodeといったらUTF-16LEBOM付きですからなぁ
966デフォルトの名無しさん:04/02/27 00:25
Excel2001で、以下のプロシージャを実行すると
Falseになるんですが...。助言キボンヌ。
Public Sub test()
Dim MyCheck
MyCheck = "a2a" Like "a#a"
MsgBox MyCheck
End Sub
967955:04/02/27 09:47
>>960
コピー機能を使って1000以上になったところで
マクロを実行したら出来ました。
有難う御座います。
968966:04/02/27 11:53
Excel2002で試したらTrueだったので、
Excel2001のバグのようです。
(´・ω・`)ショボーン
969デフォルトの名無しさん:04/02/27 13:44
セルA1に1が演算によって書き込まれたとき、
セルA2の文字(今回は白なので2)とセル自体の色(今回は赤なので3
)を変更できる仕掛けを考えております。

またセルA1に0が演算によって書き込まれたときは、
標準の設定に戻すこともできないかと悩んでおります。
どなたかご教授いただければ幸いです。
970デフォルトの名無しさん:04/02/27 16:38
>969
意味不明。 だれか通訳希望。

おそらく、こういう事でしょうか?
セルA1に”1”が入れば、セルA2の”文字の色を白(CollorIndex=2)””セル自体の色を赤(CollorIndex=3)”にする。
セルA1に”0”が入れば、セルA2の”文字の色を黒(CollorIndex=1)””セル自体の色を白(CollorIndex=2)”にする。
971デフォルトの名無しさん:04/02/27 16:52

もし>>970の内容のことをやりたいのなら、
VBAなんか使わなくても、簡単にできるんだから、
悩む前に、ちょっと調べればいいのに。
972969:04/02/27 18:13
>>971

「条件付き書式設定」ですね。ありがとうございます。
973デフォルトの名無しさん:04/02/28 14:30
昨日から悩んでいます。誰か教えてください。

とびとびにデータが入ったシートのデータが入っている最終行と
最終列をしりたいのです。
びっちりデータが入ったものなら以下のように取得できるのは
わかるのですが。空白が任意の位置にあるようなシートでは
どうすればいいのでしょうか?
eRow = Worksheets(1).Range("A65536").End(xlUp).Row
eCol = Worksheets(1).Range("A1").End(xlToRight).Column

よろしくお願いします。
974デフォルトの名無しさん:04/02/28 16:08
L列に、上から順番にいろいろな数字が書き込まれています。
一番最後に書かれている行を取得したいのですが、VBAでどのようにやればいよでしょうか?
>>974
一つ上のカキコが見えないのかと。
976974:04/02/28 16:17
あぁぁすみません、上のやってみたらできました。。
977デフォルトの名無しさん:04/02/28 16:22
>>973

eRow = Range("a1").SpecialCells(xlCellTypeLastCell).Row
eCol = Range("a1").SpecialCells(xlCellTypeLastCell).Column

これでいかがでしょうか。
978973:04/02/28 19:47
>977 うまくいってるみたいです。ありがとうございました。

ついでに教えてチャンですみませんが、エクセルの2つのシートを比較
して、その差分をとるのにいい方法はありませんか?
最終列と行のループでぶん回して、異なっているデータセルのみを色付きで表示
するマクロを作ってみましたが、速度が遅くていまいち気に入りません。
979977:04/02/28 20:24
>>973
つまり、違ったデータのセルに色をつければいいんだよね?
やっぱ、ループになっちゃいましたが、これでも重いですか?

Dim GYO As Long, RETU As Long, eRow As Long, eCol As Long, Dif As Integer
eRow = Range("a1").SpecialCells(xlCellTypeLastCell).Row
eCol = Range("a1").SpecialCells(xlCellTypeLastCell).Column
Dif = 0
For RETU = 1 To eCol
For GYO = 1 To eRow
If Sheets(1).Cells(GYO, RETU).Value <> Sheets(2).Cells(GYO, RETU).Value Then
Sheets(1).Cells(GYO, RETU).Interior.ColorIndex = 3
Sheets(1).Cells(GYO, RETU).Font.ColorIndex = 2
Sheets(2).Cells(GYO, RETU).Interior.ColorIndex = 3
Sheets(2).Cells(GYO, RETU).Font.ColorIndex = 2
Dif = Dif + 1
Else
Sheets(1).Cells(GYO, RETU).Interior.ColorIndex = xlNone
Sheets(1).Cells(GYO, RETU).Font.ColorIndex = 0
Sheets(2).Cells(GYO, RETU).Interior.ColorIndex = xlNone
Sheets(2).Cells(GYO, RETU).Font.ColorIndex = 0
End If
Next
Next
If Dif > 0 Then
MsgBox Dif & "ヶ所に違いがあります。"
ElseIf Dif = 0 Then
MsgBox "違いはありません。"
Else
MsgBox "Error", vbCritical
End If
980973:04/02/28 21:43
>977 だいたいそんな感じでやってます。

想像していたより遅かったのが嫌だったけど、使用に耐えないほど
ではないのでまあいいかとも思ってます。

レスさんきゅーでした。
981デフォルトの名無しさん:04/02/28 23:06
印刷範囲の設定で
Worksheets("sheet1").PageSetup.PrintArea = "a1:d5"
とやったのですが、D5の部分の5をLastRowに入っている数値にしたいのですが、
どのように設定すればよいのでしょうか?
= "a1:d(LastRow)" とか試してみたのですがわかりません。
982977:04/02/28 23:47
>>981

Dim LastRow As Long

LastRow = Range("D65536").End(xlUp).Row

ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(LastRow, 4)).Address


これでいかがでしょうか。
983デフォルトの名無しさん:04/02/29 17:02
質問なのですが、
VBAからエクセルで開いたCSVファイルのコントロールは不可能なのですか?
例えば、任意の行の全セル・データのコピーとか・・・
お知りの方がいましたらお願いします。
マクロ記録してみればいいんじゃないかなぁ。
985デフォルトの名無しさん:04/02/29 21:08
初心者ですいません。デバックはちゃんと出来てるのですが、
「オブジェクトはこのプロバティまたはメソッドをサポートしていません」
とエラーになります。
何がおかしいのでしょうか?ついでにファイルも、うpしておきます。
名前は「教えて君」タイトルが「VBA」です。
宜しく御願いします。


Sub Sample4_71()
Dim i As Long
For i = 1 To 100
If Cells(i, 1) = "田中" Then
MsgBox Cells(i, 1).Adderss & "見つかりました"
Exit For
End If
Next i
End Sub

ttp://taisstu.hp.infoseek.co.jp/cgi-bin/up/imgboard.cgi
>>985
RangeにAddressなんてメンバはない?
987977:04/02/29 21:16
いや、Addressのスペルが間違ってるだけ。

いかがでしょうか?
>>987
なるほど、こう言うのをコンパイル時に指摘してくれないのがVBの怖いところだな。
989981:04/02/29 21:53
>>982
たすかりました!
990985:04/02/29 22:36
>>987
有難う御座いました。
991デフォルトの名無しさん:04/02/29 22:42
すみません
時間がなくて過去ログあんまりちゃんと読んでないのだけど
既出だったら誘導してください
いま明日までにやらなくちゃいけなくててんぱってます

エクセルのソルバーアドインを1行ずつ使っていくマクロをつくったのだけど
このままでやると一回ソルバーを使うごとに

探索結果 解を記入する OK

とかいうダイアログが出てきてわざわざリターンをおさなくてはなりません
このOKをおすまでのマクロをつくりたいのだけど記録しても出てきません
どうしたらよいでしょうか?
おしえてください

992977:04/02/29 23:19
>>991
ソルバーは使ったことないのでわからんが、
ソルバーを使うコードの前に
Application.DisplayAlerts = False
と書けばいいと思う。

これでいかがでしょうか。
993991:04/02/29 23:26
>>992
やってみましたがうまくいきません

ダイアログが出てきてしまいます

やっぱり一発ずつリターンを打たなくてはならないのでしょうか?
4万行ちかくあるのでどうしても何とかしたいのですが・・・

なきそう
よくわからんけど、配列はできないのか?
995977:04/02/29 23:42
>>991
SolverSolveっていう記述を
SolverSolve(True)に変えてみてください。
996991:04/02/29 23:54
うまくいきましたーーー
今動かしてるところです
本当にどうもありがとうございました
助かりました
997デフォルトの名無しさん
Sub test()
' 配列の平均を計算
' 平均以外にも最大値、最小値、標準偏差なども求める予定

    Dim a As Variant
    Dim n As Long
    Dim i As Long

    n = 10000 ' データ数
    ReDim a(1 To n, 1 To 1)

    For i = 1 To n
        a(i, 1) = Int(Rnd() * 1000)
    Next

    Range("A1:A" & n).Value = a
    Range("B1").Value = WorksheetFunction.Average(Range("A1:A" & n)) ' 方法1
    Range("C1").Value = WorksheetFunction.Average(a) ' 方法2
End Sub

上記のような関数を作りました。
n = 1000では方法1、方法2の両方ともきちんと平均が計算されます。
しかし、n = 10000の場合、方法2では
「実行時エラー '13': 型が一致しません。」
となります。

それでお尋ねしたいことが2点あります。
・方法2の記述にはどこか問題があるのか?
・これら2つの方法以外に配列の平均を求める方法はあるのか?

教えて、偉いしと。