2 :
デフォルトの名無しさん :03/06/09 19:25
>>前スレの994 >てかOption Explicitって先頭に追加したら赤くなったぞ >いい加減なことばっか教えてんじゃねぇよ、死ねよ 激しくワラタ
なぜ誰も2ゲットしに来ない・・・・?
4 :
デフォルトの名無しさん :03/06/09 19:27
>>前スレの994 とりあえず、お前の読んでる本だかウェブだかは捨てだ
スレタイにExcelとか激しく不要なのに
6 :
デフォルトの名無しさん :03/06/09 19:42
てかもう俺のこと忘れてる?
だって解決済みだし
してねぇよ、死ねよ
どうやら、高校の課題のようですな
で、お前らはいったい何なわけ?
テンプレ ・質問する人は可能な限り具体的に書いてね。 ・コード(プログラム)を晒すと、なおヨシ。 ・質問を小出しにすると、大抵遠回りになります。 ・Excelのバージョン、OSのバージョンも書くとレスが付きやすい。 ・回答がなくてもキレないで。 ・分かる人はできるだけ回答して下さいませ。 ・書き込む前に推敲して、回答する人にわかりやすい文章に汁。
だから995が答えじゃん。タイプミスなんかじゃねえって、まぢで。 ちなみにOffice 2002。てかまぢ困った。
16 :
デフォルトの名無しさん :03/06/09 20:51
宿題は自分でやろうよ
>>15 もう一万回コード見直せw
>>10 をみると少なくとも3箇所はタイプミスしてる。
。゚(゚´Д`゚)゚。。゚(゚´Д`゚)゚。。゚(゚´Д`゚)゚。。゚(゚´Д`゚)゚。。゚(゚´Д`゚)゚。。゚(゚´Д`゚)゚。。゚(゚´Д`゚)゚。。゚(゚´Д`゚)゚。。゚(゚´Д`゚)゚。。゚(゚´Д`゚)゚。
何のスレ?ここ
つか、参考書自体がタイプミスしてるんだな。 初心者イジメて楽しいのか藻前ら・・・
訂正 前スレの978 → 前スレの982
>>15 解答はタイプミスのところじゃなくて、その下なんだが……
> というわけで、上で宣言している配列変数あたりが疑わしい。つかそれだ。
25 :
デフォルトの名無しさん :03/06/10 10:45
っていうか、エラーメッセージはコンパイルできんような状況だって言ってるんだ から、タイプミスだろうがなんだろうがプログラムになってないってことだ。
つぅか、それくらいのことは自分の頭で考えろってことだ。 今からそんな調子ではプログラマなんて無理。 プログラマになる気もないのなら、課題も捨て単位も捨て進学も捨てて 土方にでもなってろ。
俺の書いたソース、少し改変していいからFixしろ ただしなるべく俺が書いたものに忠実にな 早くしろよ
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
32 :
無料動画直リン :03/06/10 17:13
>>30 課題から外れた解答だから採点は0点です。
日付を計算して曜日を求めてください。
34 :
デフォルトの名無しさん :03/06/10 22:02
日付の入力チェックを皆さんはどのように行っていますか?
>>30 の方法は良いやりかたなのかな
>>30 をコピペったら動いた。正直、感動した。
まぁ、単に曜日が出ただけで別に何ともないと思ったけどね。てか俺のソースに忠実じゃねぇじゃねぇか
死ねよ
また何かあったら質問しに来てやるよ、じゃあな
お前ら死んでおけ☆
てかね、そのソースの各コマンドがどういう働きをしてるのか書いてみろ たとえば Private Sub CommandButton1_Click() (サブルーチンがどうのこうの) とかね 全部書いておけよ
このままでは先生に説明できないから大変だな
結局奴は何一つ理解しなかったわけだな
こういうやつが社会に出てくることが一番不安だ・・・
40 :
デフォルトの名無しさん :03/06/11 11:12
この程度の時点では社会に出てこないよ。少なくともプログラマとしては。
やあプログラマ気取りの諸君、今起きたよ つーか俺は別にプログラマなんかになるつもりはねぇよ ただちょっと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個ほどクリックしたところで、ポーンと音が鳴って、 選択したセルのアドレスがコントロール内から消えてしまいます。 恐らくコントロールに割り当てられているメモリによって、 取得できる最大文字数が制限されているのではないかと思うのですが、 何か良い解決方法がありましたらご教授くださいませ。 よろしくお願いします。
てかまだ俺の問題が解決してません。
>>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
あぼーん
ゴミレスしてないで早く書け 死ねよ
てかお前ら俺の言ってる意味わかってる? お前ら低脳だから全然わかってないぽだけど・・・
てかお前ここのスレに書かれてることわかってる? お前は荒らしてるだけだから全然頭使ってないぽだけど・・・
>>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は釣ってるつもりが実はかなりの釣られ野郎だな。ちょっとオモロイ。
>>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)) するんじゃ駄目?
>>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)としてもだめでした どなたかよろしくお願いします。
自己レスまことにもうしわけございません。 解決しました 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
>>90 レスありがとうございますた。
初心者ゆえcnn.open内のパラメータが理解できず四苦八苦しております
>次スレ立てろなんて誰も書いてなかった筈なのに なんか典型的ダメ人間が混じり込んでるね スレっていうのは立てたいから立てるんだよ、わかるかな?指示を待つだけの奴隷くん
93 :
デフォルトの名無しさん :03/06/13 21:01
質問させていただきます、どなたか教えていただけませんか ユーザーフォームイメージコントロールを配置して、そこにイメージを読み込んでから ユーザーフォームの大きさをイメージに合わせたいと思っています。 loadpicture関数でイメージを読み込むところまではいいんですが、 フォームのheightプロパティを、イメージのheightと合わせても、タイトルバーの 高さ分切れてしまいます。 VBだとScaleHeightが使えるようですが、ヘルプ見たところ、VBAではなんか違うメソッドに なっているんですか? このような場合、どうやってイメージの大きさとユーザーフォームの大きさを合わせればよいのか どなたかよろしくおねがいいたします。 下手な文章で申し訳ないです
>>92 どう見ても前スレで騒いでた奴を釣る為に立てたとしか思えないんだが……
>>94 つーか1=前スレで騒いでた奴だろ
個人的な理由でスレ立てるな > 1
スレ立てるのって大多数が個人的な理由だと思うんですけど・・・・
てか釣られたのを素直に認められない人なんですね、皆さん
どーのこーの言って、投稿と回答が続いているからそれでええやん。 まったく廃れているんならともかく。
いや、回答は確かに続いてるが、解答はあまりされていないと思うんだが
要するに回答者がヘタレ揃いなわけだ
いいこと言った!!
102 :
デフォルトの名無しさん :03/06/13 23:11
100自体はいいことでもなんでもない単なる事実認識だ。
てか自演なんですけどね
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を使用
>>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でオナニしたいのですがどうすればいいですか 本当に困ってるのでお願いします
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)
>117 あっ Callが必要だった・・・ ありがとうございます。
As stringってどんな意味?
121 :
デフォルトの名無しさん :03/06/16 10:35
Dim 弦 as string 弦はストリングですよ〜、だ。 ストリングって何だ?となると、本来は Character String。 ひと続きの文字の並び。 んじゃDimは?とくれば、Dimensionの略。 昔のBasicでは配列の宣言にDimを使ってたけど、変数の宣言として統一された。
Hyper Dimension
>>120 こういうやつって最低だよね
放置するわけでもなく「検索しろ」。おぉ、嫌だ
おまえみたいなゴミはこのスレにいらないから消えろ。そして市ね
おまえもゴミ
こういうやつって最低だよね 放置するわけでもなく「検索しろ」。おぉ、嫌だ おまえみたいなゴミはこのスレにいらないから消えろ。そして市ね
これから質問攻めするけどいい?
何よ、報知なわけ?
いつもお世話になります。お尋ねしたいのですが 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を西暦の年月日に変換して比較することにより、
年月日の入力が西暦で正しく行われているかチェックしている。
>>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の短所と長所はなんですか?詳しく教えてください
短所:アプリケーション依存である 長所:アプリケーション専用である
教えてください 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
うーん、思いがけず勉強になりますた
>>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型」の整数を代入すればいいのか。
兄貴!ありがとう!!
自作自演ご苦労様です。
自作自演じゃないし・・・
>>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
>>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初めてで原因もわからないです。 もうどうしえちいのか・・ どなたかおしえてください
ごばくしましたすいません
あ、つづいてたのね。
インデックスが無い、という話から想像すると "表(詳細)" シートの名前が 違っているのではないかな? "表 (詳細)" とか。
(半角) と (全角) も別物として扱われるので注意。 ちなみに、この時のエラーは インデックスが有効範囲にありません。(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でサーバ作るのはおやめになって!
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!
195 :
デフォルトの名無しさん :03/07/07 00:12
>>190 設計資料を拾うか、Excelのバグを拾うか、どちらかだね・・・
196 :
デフォルトの名無しさん :03/07/07 21:44
結局avprp買って、バックドアから無理やり開いた。
すみません教えてください。 FileDialogはオフィスXPでないと使えないのでしょうか?
Application.GetOpenFilename と Application.GetSaveAsFilename は 97とかでも使えるはず。
えーと、忘れがちなんだがこのスレは。
201 :
デフォルトの名無しさん :03/07/10 09:14
>196 くらっくしたの?
>>196 買ったのか
尻くらいすぐ見つかると思うがな
203 :
デフォルトの名無しさん :03/07/10 22:06
仕事で使うので、買いました。 本当です。 この目を見てください。
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
>>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 変に凝った名前よりは判りやすくて良いと思うけど?
216 :
デフォルトの名無しさん :03/07/13 20:18
Book A と Book B を読み込んで、 Book A の標準モジュールから Book B の標準モジュールにある Public 変数の値を 参照したり書換えたりできるのでしょうか? できるのであれば、どのように指定すれば よいのでしょうか?
>>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が表示される。
>>221 様
すごい! できた。
処理を分岐させるスイッチなので
シート上には表示したくなかったのです。
感謝三唱。
ありがとうございました。
ありがとうございました。
ありがとうございました。
223 :
デフォルトの名無しさん :03/07/14 22:59
あいかわらずマ板とは思えない内容ですな。 ビソ板に帰れよ。
225 :
教えてください :03/07/14 23:46
Excelでフォーカスがあるところを任意の色に塗りつぶして フォーカスが外れると元の色に戻す というマクロを組みたいのですがどうもうまくいきません。 だれか助けてくださ〜い
226 :
デフォルトの名無しさん :03/07/15 00:14
あるセルをクリックすると同じブック内の他のセルにジャンプする[ハイパーリンク]-[このドキュメント内] の機能をマクロで実現するにはどのようにすればよろしいのでしょうか? どなたか教えてください。
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
>>226 「マクロの記録」を実行して、ハイパーリンクの編集をやってみてよ
>>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
あ・・・書きかけで暴発 続き 上のやつを実行した後に、 ワークシートに貼り付けたコマンドボタンクリックで 別のシートを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はいらなかった。デバッグ用に使ったの残ってたでし。
>>242 レベルが低いと思う理由、または、
自分で書いたコードを乗せて欲しいな・・・
236のレベルなら、これで十分と思うが。
コピーしてペーストは止めた方がいい悪癖だと思う。
質問です excelVBAのフォームにリストボックスを作りました リストには2列表示させたいのですが、どうすればいいのでしょうか ColumnCount を 2に設定したのまではいいのですが、それぞれの列に値を入れることが出来ません &でつなげて見た目には2列にすることは出来ますが 1列目のデータが10文字だったり20文字だったりしますのでずれてしまうのです 教えてください、お願いします
>>246 ListView使うのが良いと思うよ。
247さん 早速の回答ありがとうございます YaHOOで検索したところ ListViewというのは何かのツールのようですが(現在も調べ中) 出来ればどノーマルのexcel2000,excel97で動かしたのです
ヤフーじゃなくてまずヘルプ内を検索したほうがよいかと
test
ヘルプにはのってませんでした OCXのようですね 配布を考えてますので、オフィスがデフォルトの状態で使いたいのですが・・・ Colmnは設定できるのに表示が出来ないとは思えないので 何かやり方があるはずだと思うのですが
>>246 のおかげでひとつ賢くなった。
ExcelXPにはあるのにね。
一番初心者臭いのは
Len関数で文字数カウント→差分を" "で埋めるとか
>>246 できる。
ListboxのヘルプのColumnプロパティ or Listプロパティ
を読んでみれ。
arrayを使ってやればよいのですね additemで一軒ずつ取込むのではなく arrayに取込んでから一気にlistで取込むということで合ってますでしょうか?
sage忘れてましたすみません
257 :
名無し@沢村 :03/07/30 23:17
学校のおじさんのつくったExcelVBAを真面目に勉強している、へたれたちのいるスレはここですか?
客先がExcelファイルを要求しない幸運な人ですか?
>>257 さん、すみませんヘタレで
ですが、ヘタレなのは私だけなんで「たち」はやめて頂けませんでしょうか
>>258 さん
そうです。最初はVBで作ってたのですが配布直前に「操作がよくわからんからエクセルで」といわれました
エクセルでよくやるコピー&ペーストや画面に合わせての拡大縮小などなどがないことが不満のようです
エクセルにした方がのちのち大変なことになるのはわかってるのですが
「やれ」と言われればやらなければいけない環境(説得出来る状況じゃないんですね、客先のほうが圧倒的に強いので)なので
エクセルで作ってます
多分というか絶対あとで大変なことになりますね
肝心な事を忘れていました レスくれた皆さんありがとうございました
あの、VBAにはVBのFileListBoxみたいなの無いんですか? 指定したディレクトリ下のファイルリスト情報が欲しいのですが、、、、 ShellでDIR叩いてリダイレクトでファイル作って解析するしか無いのでしょうか・・ 正直困ってます。。
262 :
デフォルトの名無しさん :03/08/01 20:16
>>262 あれ、再帰するとなぜかページ違反を起こすので、個人的にはファイルシステムオブジェクトを勧めるよ。
>>263 横から申し訳ないけど、教えていただけ無いでしょうか。私もぜひそれを知りたいので、よろしくおながいします。
使えた・・・
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
(^^)
でも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
>>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
>>279 そうか、名前を見ればいいんですね〜。
というわけで
If ActiveWorkbook.Name = ThisWorkbook.Name Then
とすることで、無事に期待した通りの動きをしてくれました。
ありがとうございます!
>>280 Stringのまま比較するから無理があるのです。
日付に変換してチェックすればよい。
>>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を使えばよいのでは
>>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で回避する方法がさっぱり分かりません(汗
真偽値なり定数なり、なんらかのメッセージを返して来てるとは思うんですが、
一体何が返ってくるのか分からないので、困っています。
宜しければご教授お願いします〜・・・
よく調べると、エラー1004が帰ってきてました。 こいつをトラップしてやればいいんですね。 お騒がせしました。
>>291 name=の行も直しておいたほうがいいと思いますよ
>>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
複数のブックを開いた状態で、ブック間を移動させるボタンを作りました。 ボタンを押せば、次々とブックが切り替わります。 しかし、描画が完全に終わる前にボタンを押してしまったら、その操作は無効になり、 次の動作が変になってしまいます。 (画面は変更されなくても、ボタンを押した際に内部のカウンタが増加されているため) ブックが完全に更新し終わるまで、ボタン操作を無効にすることはできるんでしょうか?
>>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のリストの中から選択できるようにしたいんだけど
やってはみました。 VBAのHelp調べてそれらしいプロパティを調べたり ぐぐってみたけどそれらしいのがない。
Validation
>>303 サンスコ おかげででできました。
ホント厨房な質問して迷惑かけてスマン
>>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と並べる式を教えてください
>>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 は不要でしょ。
>>308 以下も必要かな
If (InStr(1,strDate,"+") > 0) Or (InStr(1,strDate,"-") > 0) Then
Exit Function
End If
>>309 要件として終わったことに長々と指摘してくれたところで申し訳ないのですが、あなたの指摘で的確な部分は
>IsDateでチェックしたあとなら、9999/12/31より大きな日付になることはないので
これだけです。これは私の確認不足でした。
>IsNumericは1文字ごとに行う必要無い。ヘルプ嫁
あなたはヘルプ以前に要件を確認しましょうね。
例えば"001000"だけがTrueとなる必要がある場合でも、あなたのやり方では
"01,000"も" 1000"も"1000.0"も等価になります。
それらや算術記号を回避するために延々とinstr並べるってんですか?
そんな不細工なコーディングする感覚で良く平気ですね。メリットないでしょ。
それにダメ出ししているLen使ってたところとか、いつの間にか無意味に
日付型で大小比較してたりするところを無かったことにしてるところとか
見る限りでは「なんだかな〜」だし。
なんでこっちが敢えて使わないのかすら推量できない想像力。
あなた自分では出来るつもりなんでしょうけど、ハッキリ言うとプログラムのセンス無いですよ。
293さん、失礼しました。 IsNumericの扱いは私の考えが足りてませんでした。 他人が真剣に考えているのに、思いつきで口を出すべきではありませんでした。 今回の件は私も勉強になりました。
なぜ293は必死なのかと
Office2000のExcelで、日本語中国語混在の文書を作ってます。 Excel自体の方はunicodeなので(不満は残るけど)一応両方扱えるのですが、 肝心のVBAが、どうも単一の言語しか想定してない仕様みたいですね。 例えば Worksheets("シート名")のようなのが、日本語版Excelで作ると 中国語版のExcelで動かないし、逆もまた然りです。 この辺うまく対処している方がいたら、どうしているか教えて下さい。
すいません、うまく説明できてないので補足します。 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つのソースコードだけ回復すればいいのですが・・) 業者に頼んでもいいですが、何かいい方法はあるでしょうか?
今質問したばっかりですが解決してしまいました バージョン違いのEXCELで読めばコードが出てきました 失礼致しました
>>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
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を増やさなければならず、 結果的に不格好なプログラムになってしまうと思うんです。 何か旨い方法(簡略なコード)ってないですかねぇ。。。 必要に迫られているわけではないのですが、いったん考え出すと気になってしまって。
すみません。タブが消えて読みにくくなってしまいました。
public function arr(CharCount as Long,CharIndex as Long) ってちょっと待て!パスワードクラッカーじゃねぇか!!
えぇ。。。 早い話自分で作った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
>>332 俺が書こうとしたのもそれだわ。
再帰だよな。基本は。
おぉ、ありがとうございます。 ちょっと読んでみます。 まだ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
>336 すみません、マクロを記録した結果から作っただけでして、良くわかっていません。 自動記録の際には、メディアクリップオブジェクトを選択して、 さらにクリックしたら、再生されました。 その際の記録から、335に書いた下の処理で再生できるはずと思ってました。 ActiveSheet.Shapes("Object 4").Select Selection.Verb Verb:=xlPrimary なにか、足りないのでしょうか? (努力が足りないのは、わかってます。教えてクンで申しわけないです)
>>337 >メディアクリップオブジェクトを選択して、
>さらにクリック
この部分は記録されないようだね。
おお、そうですか。早速のレスありがとうございます。 ん〜、もうちょっと勉強します。
340 :
デフォルトの名無しさん :03/08/15 13:39
(⌒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 プログラムを使わなくても出来そうだが、、、
いろいろな場合に摘出したいってのと、こういう関係の式を 次々に研究したいと思うので、その大元になるプログラム の書き方をぜひぜひ教えていただきたいなと思いました
If C < A And A <= B - 2 And X <> 0 Then Y = D / X
354 :
デフォルトの名無しさん :03/08/26 00:07
age
356 :
デフォルトの名無しさん :03/08/29 12:24
マクロってどのスレで聞けばいいの?
>>356 経済学板へどうぞ
358 :
デフォルトの名無しさん :03/08/30 17:33
>>358 Module1の"分析用ワークブック" を "分析用ワークブック.xls"に直したら
動いたが?
OS:XP
Excel:Excel2002
360 :
デフォルトの名無しさん :03/08/30 19:26
質問です。 Excelのマクロを用いて、プリンタのドライバか何かが独自に持っている印刷機能の設定 を行うにはどの様にしたら良いのでしょうか。 例えば、富士通のとあるプリンタには「1up/2up/4up…」といった設定が有り、1つの紙 に複数のページを印刷する機能が有ります。それの設定を行いたいのです。 宜しくお願い致します。
>>360 専用のプリンタ設定作っといて、それで印刷かければ?
EXCELからは複数項の印刷だけどプリンタドライバ側で1枚にまとめる機能だろ? VBAからそのドライバをいじるほぼ無理だろう。 たぶんそのドライバの設定がレジストリのどこかにあるだろうから そいつを探し出して書き換えるぐらいしか方法は無い。 それができなければ複数枚印刷用のワークシートを作って、そいつを印刷すればいい。 配置と拡大率いじるだけだから簡単だ。
>>361-362 どうもです。
それ良いですね。
Excelのファイル(ブック)って個々のシート毎にプリンタドライバの設定を保持
しているみたいですからね。
それを利用して予め1up/2up/4up…という設定のシートを作って置く…と。
印刷する時は印刷したいシートのデータを印刷専用シートにコピり印刷すると。
しかし、それだと個々の印刷したいシートにプリンタドライバの印刷設定を持た
せる事はやはり出来ないという事ですか…。
印刷したいシートに非表示の印刷情報(1up/2up/4up…)を持たせて置いて、印
刷専用のマクロでそれを読み取り、印刷専用シートにコピって印刷って事になり
ますか。
そうすると、印刷専用のマクロを知る人で無いとその印刷設定は利用出来ない訳
ですか。
でも、俺個人で利用するだけだから良いのか…。
納得しました。有り難う御座いました。
365 :
デフォルトの名無しさん :03/08/31 00:14
>>360 APIでPRINTER_INFO_X構造体は調べれば何かヒントがあるかも。
特にDEVMODE構造体の拡張領域とか。
366 :
デフォルトの名無しさん :03/08/31 00:16
どなたか、 マクロ実行後に"取り消し"を できるようにする方法、教えてください。
Application.Undo
今更気付きました。阿呆ですみません。 次の手順で行けば個々の印刷したいシートにプリンタドライバの印刷設定を持 たせられそうです。 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プロパティがあるのは何故だろう。
グローバルだから
>>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が出来るかどうかは知らん)。
セルの真下のセルに何か文字列があればそのセルの下線は点線で セルの真下に何もなければセルの下線を棒線にしたいのですが 教えてください また、A1からIV65536の全てのセルに存在する文字を全角から半角にするには どうすればいいのでしょうか?
>>391 WorkSheet_SelectionChange
If Len(Target.Value) <> 0 Then
StrConv()
キーワード的にはこんなもん
条件付き書式で済みそうな質問ばっかしだな、最近。
すいません、質問なんですが ひとつのセルに文章と数字が代入されている文字を一緒に書き出せる 方法ってありませんか? x=9 “今日はx月です”とかにしてxは自分で好きな数字をいれるとか、、、
表示形式をユーザー定義にして "今日は"0"日です" とかにすれば楽だけど・・・
>>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で変更のあったシートが分かる そいつで変更されたかどうかのフラグを管理すれ
>>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
ブック内の全シートに対して一斉に ボタンを押せば、マクロを反映させるコードって何でしょうか? 教えてください
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 Evalとか無いんかね?
取りあえずコレクションで良いんじゃないの?
と思ったので
>>431 に一票。
>428 ウチは何も考えずにWhile条件に Or objIE.readyState <> 4を追加してるな。おまじない程度に。 それと、それってフレームをナビゲートする時エラーにならんかい?
連想配列ならDictionaryオブジェクトか。
>>433 レス、ありがとう。
おまじない真似させていただます。
フレーム無しでしか試してないですけど、エラーになるかも。
もし他にも情報がありましたら、よろしくお願いします。
437 :
デフォルトの名無しさん :03/10/04 19:32
すいません、教えてください。 仕事で2000のVBAをデータベース関連で 使っている者ですが、今度出る2003は、 買い換える程の機能向上・追加はあるのでしょうか?
438 :
デフォルトの名無しさん :03/10/05 04:43
無い
VBAのコードをThisworkbookの所に書くのと 標準モジュールを追加してそこに書くのと それぞれのシートの所に書くのとどんな違いがあるんでしょうか?
>>440 ヲイヲイ...
>>439 そんな質問してるうちは気にしなくていい気がする。
そのうち分かりますヨ。お勉強ガンバッテ
連想配列ですか。。。 初耳なので調べてみたのですが、どうやら近そうです。 が、今の環境じゃ使えないっぽいです。 ありがとうございました。 で、新たな質問なのですが、 定数にセルの値を参照するのは可能でしょうか? Const hoge as Long = Cells(1,1) の様な感じで。 上のだと「定数式が必要です」というメッセージがでるんです。
445 :
デフォルトの名無しさん :03/10/08 20:56
429は試す前に質問しちゃ駄目だよ。 しても悪くは無いが、力つかんよ。
446 :
デフォルトの名無しさん :03/10/08 20:58
>定数にセルの値を参照するのは可能でしょうか? 1.定数に... 2....参照するの... 激しくDQN
「一旦初期値を与えると以後は変更不可能な変数」が欲しいということね
>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 すいません
教えてください
そんな書き方あるんでしょうか?
>>451 マクロなんて不要。
全シート選択状態で、CTRL+Aしてから、左寄せ。
>>455 というよりも
彼は左寄せがしたいんじゃなく
ある動作を全シートに反映させることがしたいんだろ
>>453 for-next を使うなら
Dim i As Long
For i=1 to Sheets.Count
Sheets(i).〜 処理
Next i
>>457 いや、彼の文章からは「具体的に」全セルを左寄せ、としか読めないが。
つまりは、スレ違い(と言うより、板違い)だな。
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
>>467 もっと効率のいいやり方が存在するのか?
正規表現も使えないもんな。不便すぎる。
効率悪くても手で一つ一つ直していく事を考えれば楽じゃん。ワークシートが 2つあればExcelを2個立ち上げればいいだけの話だし。ページの切り替えも もちろんVBAにやらせる。
式+マクロで後ろの一文字づつ消してけば?
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に提示のように、左から文字→数字の条件による。
>>474 数字のみだった場合用ですか..?
>>473 If z= ........ ="0" Then のところを
Asciiコードで囲ってしまったほうが若干スマートに見えるかも?です。
あいかわらず情報量0です。スミマセヌ
VBの文字列操作関数って、VBAでもつかえますか?
>>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
>>482 おおっ。目から鱗。
どうもです。
なお、Ifの条件は左から数字に当たるまで探すという問い合わせ方法なので、NOTではないです。
>>477 使えるんですね。どうもありがとうございました。
486 :
こっちも頼む :03/10/16 20:16
すみません。かなり悩んでます。 環境は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
解決しました><
>>487 できれば解決法を教えていただければ...
なんだかがっかり。 コードで言い表さなくても、自分のことばでどういう処理で解決したのかを伝えて欲しかったな。
492 :
デフォルトの名無しさん :03/10/20 03:14
ExcelVBAでCreateThreadしてマルチスレッドをやってみました。 ところがAddressOfで与えた関数内で,ユーザフォームのオブジェクトや 各シートのプロパティを操作したところExcelが静かに墜落しました。 VBAではマルチスレッドは使えないのでしょうか?
Excelが分かると便利ですね。 私はExcel97しか持ってませんが、今のとVBAの機能はだいぶ違いますか?
VBでつかえるAPIはデキセルでもつかえるのかっと
>>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列に入ってる数字が偶数だったら、文字の色を青くするコードを書いてみてください
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
>>506 Dim strDate as Date '日付型 DATE関数で取り込んだ日時のいれもの
Dim strDate as string '日付型から変換した文字列型のいれもの
strDate=Format(dtDate, "YYYYMMDD") ’日付型を文字列に変換
Formatは指定した書式の文字列に変換する関数なので
その文字列を格納するか即使用する必要があります。
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 イベントは発生しないのですか?
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
>>516 こんなに早く、ソースまで付けてもらってビクーリです。
早速試してみます。一寸図々しいですが、他にもアイデアありましたら
よろしくお願い致します。
どうも有難うございました。
Excel2002ですが、ひとつ教えてください。ユーザーフォームのボタンはボタンの色を変えられるけど シートに貼り付ける方のボタンありますよね。あれって背景の色を変えることって出来ないんですか? プロパティ見てもそのようなのが無いみたいだけど、シートと同じ色なんで他の色に変えて判りやすく したいなぁと思ってるんですが。
コントロールツールボックスのじゃダメ?
>>519 このボックスの奴もプロパティでパターンが無いですよね?うーん、そのボタンを置いてるセルの辺りの
色をつけて置いたほうが良いみたいな?
ちなみにコントロールツールボックスは初めて知りました(^^;。情報有難うございます。
XP+xl2002のみの確認だけどBackStyleプロパティ無いでしょうか? 背景色を変えたいというのでOptionButtonだと思うのでが違うのでしょうか? あと、私の認識ではフォームのほうのコントロール類はxl95時代の名残なんで VBA使うのだったらコントロールツールボックスを使用する方が ユーザーフォームから移行する際等に楽だと思います。
>>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のセルに入力されたデータをボタンを押して送信するような形です。
>>527 ん?
セルの内容をURLパラメータで渡して戻ってくるHTMLをシートに表示したいってことじゃないの?
POSTを使いたいってこと?
>>525 もし
>>528 の内容をやりたいんだったら、
1. マクロ記録を開始
2. Webクエリを実行(これがわからなければヘルプ参照)
3. マクロ記録を終了
4. 記録されたマクロをF1を駆使して改造
で何とかなると思うぞ。キーワードは"Webクエリ"だ。Get MethodだったらこれでOK。
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を消すことが 可能なのかわかりません。 そもそも上記のコードは確認無し、上書き保存として間違えてませんでしょうか? 宜しくお願いします。
Application.DisplayAlertsで検索
>>532 ありがとうございます。
無事解決しました。
DisplayAlertsって警告メッセージを抑止するんだから
保存の際の確認メッセージを止めることはできない、と
勝手に思い込み試すこともしていませんでした。
助かりました.
補足(?):
>>531 さんは分かってるかも知れんけど、
>>531 のコードは既存のファイルを消して新規保存するから
当然の如く確認メッセージは出ない、という事だと。
以上、オンヌーですた
>>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)))
>>536 すこぶる納得できました。
ありがとうございます。
540 :
hama- ◆DSCCo.c9U6 :03/11/12 09:28
偽スレで質問してしまっていたのですが もう一度質問です。 VBでブラウザを作っているのですが、 IEのお気に入りの参照の仕方を教えていただけませんか。 お願いしますm(_ _)m
541 :
hama- ◆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です
解決しました。 印刷ページを指定してるセルが一個ずれてただけでした。 お騒がせしました。
保守
>>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・・)にも色がついてしまいます。 無記入のセルには設定を反映させないようにしたいのですが どうやったらいいのでしょうか?
>>554 範囲指定がRange("A5:A65536").Selectとなっているので
全部塗りつぶしされます。
記入してあるセルまでの範囲を指定したいのですが
このような場合にはどうやったらいいでしょうか。
>>555 情報を小出しにするな。
思い込みで発言するな。
該当個所のソースを示せ。
まぁ、それ以前に、VBA使う必要なさそうだけどな。
557 :
デフォルトの名無しさん :03/11/25 21:49
あのー激しくガイシュツだと思うんですが XPで作ったマクロを98で動かそうとしたらエラーがでました。 なぜなんですか?98では動かせないんですか?
>>557 どうやって動かそうとしたの?
コピペで動かそうとして動かないんなら、
・そのマクロは汎用的ではなくもとのBookの構造などに依存しているため動かない
・XPで拡張・変更された機能を使っている
のどっちかだと思う。
簡単なマクロなら、基本的にExcel5以降で互換性あるとおもうよ。
>>557 エラーが出たときは
どんなコードを実行しようとしているときに
どんなエラーが出たのか具体的に書かないと
正確に答えられない。
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列の番号もソートできるようにしたいのですがどのようにしたらよろしいでしょうか? もしよろしければコードをお願いします。
>>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使う必要があるのか、もう一度よーく考えてください。
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が間違い
>>564 う〜んと、ではUserform1を消して次のステップに行くにはどうすりゃ良いんでしょうか?
>>564 すんません。Unload Meを Userform1.Hideに変更してみたら大丈夫でした。サンキュー
その後いろいろ検索して試してみましたが駄目でした。 新規に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にあいまい検索なんてあったか?
>>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もいきなり出てくるぞ。
Public RR As Long Public wsname As String です。
>>574 なんでRRをPublicにするんだよ。
プロシージャレベルにするのが常識。
>>572 教えてくれてありがとうございます。
今見ただけでは全然解らないのですが(スマソ)
本片手に解読してみます。
ありがとうございました。
>>573 何を言ってるのか全然解りません。
ごめんなさい。
私は全然VBA素人なので、
>>572 さんに教えてもらったの
で頑張ってみます。
>>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行目)を取得するエレガントな方法って ありますか?
間違えました。 >(この場合だと6行目) この場合だと5行目でした。
>>582 range("B65535").end(xlup).row
みたいな感じ?
>>584 ズバリです!
なるほどー最終行からCtrl+↑したのと同じような感じですね。
ありがとうございました!
>>582 つーかそんなのちょっと調べりゃわかるだろ!勉強しろ
>>587 な、なりました…スゲェ!
>>586 ヘルプで一度はたどり着いておきながら、
xlupっていう発想がでなくて素通りしてしまってたんですよ…
WinXP proにOffice97をインストールして、作っていたマクロが動きません。 Application.FileSearch.FileName="*.jpg"(前後省略) bmpやgifだと検索するのですが、なぜかjpgだと検索せずに実行時エラーが でるのはなぜでしょうか?教えてください。
CHARワークシート関数 数値を ASCII または JIS コードの番号と見なし、それに対応する文字を返します。たとえば、種類の異なるコンピュータで作成したファイルからコード番号を取得し、CHAR 関数を使ってそれを文字に変換することができます。 ↑をVBAで行いたいのですが・・・可能でしょうか? (functionの中で上記機能を拡張したい為)
Application.Worksheetfunction.Char〜 は?
Application.Worksheetfunction でワークシート関数は何でも使えるのですね? 今日はすごく勉強になりました! ありがとうございます。
WorksheetFunctionは万能じゃない! 「Application.WorksheetFunction.×××」とすればどんな関数も利用可能かというと、これがそうじゃない。こんな関数くらい実現してよ、と思うくらい簡単な関数がなかったりします。そんな時はマクロにすべて頼らず、ワークシートも使ってあげましょう。
隠しセルにその関数を書けばどんな関数でも使用可能。
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
604 :
デフォルトの名無しさん :03/12/09 00:10
教えてください A列に1〜Xまでの数字がランダムに(1、51、5、8・・・X)あって それをマクロを使って自動的にソート(1,2,3,4、・・・X)できるようにするには どうしたらいいのでしょうか? ちなみにXの値はデータを入力するごとに増えていきます。
>>604 まず、マクロ記録で「並び替え」試してみようや
>>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
すいません、修正します。 Active→Activate Worksheets("format").Cells(tuika_kensaku + 6, rec_cop + 3).Activate←ココでエラーが出ます
すいません、上記の問題(
>>612 )は解決しました。
どうも失礼しました。
>>614 このスレを消費したんだからどのように解決したかぐらい書けや、ゴルァ。
おきまりとしてシート名が間違ってたとか?
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) のように、十進数で指定できる。
>>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とかのキーワードと一緒にググッてみましたが、 よく分かりませんでした。 ご存知の方がいらっしゃいましたら、ご教授お願い致します。 よろしくお願いします。
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
タイマー部分の記述も書いて
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
レスありがとうございます。>627 516のExcelForegroundを参考にしてモジュールに加えましたが、 どうもうまくいきません。 タスクバーの中で、ハイライトされるだけです。
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 ???????
そのまま...で行けないか?
どっちにしろダブルクリックしたら勝手に作ってくれるだろ。
>>631 そのままで行けません
ダブルクリックだとFrame.click()になります。
Frame内のオプションボタンはFrame外のオプションボタンとは
別扱いみたいです。
Frameを右クリック=>フレームオブジェクト=>編集
としてフレーム内の編集モードに入り
オプションボタン右クリック=>プロパティ
でプロパティの編集は出来るのですが、ふつうのプロパティウィンドウ
とは違うものが出てきます。そこのnameに1個目ならOptionButton1
と入ってるのですが、いったんこの編集モードを終了して
Frame外(ワークシート上)にオプションボタンを
新しく貼り付けますとさっきと同じOptionButton1という名前で作成されます。
OptionButton1_Click()で処理を与えますと
Frame外のOptionButton1のほうに反応します。
なので、Frame内のOptionButton1に反応させることが出来ないのです。
以上引き続き よろしくおねがいします。
大変失礼しました。630さんの言うとおりですね.... いざとなったらクラスモジュールで捕まえられるだろうけど....
>>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
(つづく)
(つづき) クラスモジュール: 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外のやつにも同じようにせんと反応しないかも? テスト中に色んな不思議な挙動が....
>>634-5 まだ解決していません^^;
わざわざコード書いていただいて本当にありがとうございます。
早速試してみます。
>>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は触れていないのですが
念の為、確認してみます。
(再計算が手動…って初めて聞きました。 ……これらが原因だったらいいなぁ)
>>634-5 教えていただいたコードを参考にしてフレーム内のオプションボタン
をおすと、希望の処理に飛ぶことは出来るようになりました。
ありがとうございます。
ファイルオープン時に実行するようにすることで
1クリックで使うことが出来、フレーム外と操作性が同じになりました^^
>>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 モジュールをエクスポーとしてエディタで開く。
Excel2000くらいまでは、簡単にプロジェクトのパスワード破られちゃうのですか?
>>651 !!
VB付属のエディタだとばかり思っていました。
失礼致しました。
ありがとうございました。
エクセルのファイルで1行から10行まで アトランダムにグループ分けされているデータがあります。 グループ一つおきに、薄く色を付けたいのですが、 VBA初心者ですので簡単にできる方法を教えください。 group menue nedann 1 カレー 500円 2 天丼 600円 2 親子丼 400円 2 たまご丼 350円 3 ラーメン 750円 3 やきそば 400円 4 サラダ 250円
ちよっと説明不足でした。 一行おきの色付けでなく グループの行数がさまざまに 変化している表です。
実は解決していなかったので再びのこのこと・・・ Attribute VB_PredeclaredId = True としておけばプロシージャIDの設定が可能になると思ったのですが Web検索してもよくわからずでした。 逆にVB_PredeclaredId 属性の設定を変更してしまうと モジュール内部に矛盾が生じることがあるため、テキストエディタで 編集すべきではない、というの見つけました。 一体どうすれば・・・
>>657 だからぁ〜
グループ一つおきってことは
groupのセルの値が偶数か奇数かで判断すればいいだけでしょ。
それは2で割った余りが0か1かってことなので
あとはリンク先の情報から出来そう、ってことです。
またまた説明不足でした。655に示した表では各グループの行数が group1が1行、group2が3行、group3が2行、group4が1行 となっているので、group1(1行)とgroup3(2行)に薄く色を付けたいんです。
>>660 >>となっているので、group1(1行)とgroup3(2行)に薄く色を付けたいんです。
だから、、、、、、
group1ってのは「groupのセルの値」が「1」ってことなんでしょ。
でgroup3ってのは「groupのセルの値」が「3」ってことなんでしょ。
各行のgroup列が偶数奇数かどうか
=group列の値を2で割りきれるかどうか
=group列を2で割った余りが0か1か
で判断しなさいって言ってんの。
あとは656で最初にヒットしたページでできるでしょう。
MODで
あと10分でこのスレから消えるから
解決しました。 ありがとうございます。 group番号が連番でなかったので混乱してました。
ものすごく基本的なことなのかもしれませんが accessでいうところのオートナンバーってあります? 大量のセルに一度で番号付けしたいんですがVBAでしないと駄目なんですかね。
あるセルの文字に下線をつけたいんだが Cells(x, y). のあと、どうすればええの?
エクセルのファイルが壊れたとき、VBAのコードを抽出する方法を知ってる方いませんか? シートのデータは取り出せるんですが、コードを取り出す方法は検索でも見つかりませんでした…
>668 OpenOfficeで上書き保存しる でマクロ無効で開いてコードコピー 漏れはこれで助かった
>>669 ありがとうございます。
今は問題のファイルが手元にないので、今度OpenOfficeを入れて試してみます。
671 :
デフォルトの名無しさん :03/12/28 01:43
>>667 わかんね〜なら出てくんなよ、このクソヴォケが(ワラ
673 :
デフォルトの名無しさん :03/12/30 19:12
Range("A1").Name = "sage" と、一度設定したRangeの名前を消してしまいたいのですが、 どうやったらよいのでしょうか? VBAどころか、手での操作でもキャンセルする方法がわかりません。
ActiveWorkbook.Names("sage").Delete 手での操作、HELPで探したか、ゴラァ!
>>674 おおすばらしい。
ですが、手での操作がまだわからんちんです。
ゴラァ!ついでに教えてください。
縦横計算+ワークシート関数以外でのExcel歴20時間ぐらいなもので
>674 漏れも設定方法しかしらない。 セルそのものを削除したら一緒に消え去ったから、 枠組を崩さない場所にcut&pasteしてからセル削除してる……
挿入-名前-定義-削除 自力で探す努力もしろやぁ!で無視するつもりだったが、 676の分ツー事で・・・
Excelの使い方はスレ違い
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 開かれているブックと同じ名前のブックを
開こうとしているようですが、
どんなコードを実行しているか分からないので
どう回避すべきか分かりません。
保存のあとクローズしていますか?
>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は分かるが、保存先のどこがすごいんだ。
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
日本語の使用はバグの元になりやすいので使わないようにという説と、ドキュメント性の向上から大いに使うべしとの 説もあるようで、後者を採ってます。トラブるようなら一括置換すればいいわけで…・ また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 そんなことは百も承知。
にもかかわらず、結果は人それぞれ。
どんなに議論しても「正しい表記のしかた」という
結論は出ない。
>693 産休です。エラーは”エクセルが原因で・・・・・どうのこうの”だったり プリンタが双方向通信のため、紙詰まりなどのエラー時の内容をバッファし、後々まで影響を与えたり、 ブラウザのエラーが波及したりで98系のOSの弱点をモロに受けてます。最小限のアプリ稼動にします。 変数名のコーディングスタンダードなるものは知りませんでした。(我流のツマミ食いプログラムなので) 漢字でもミス防止に原則的にコピペで書いているので打つのは一回だけです。また定型文は 単語登録しており(例 えん→YEND = Range("J9900").End(xlUp).Row)また自作関数も多用し たいていは類例のコピペ+αで済んでます。MINBITより最下位ビットと書くほうの恩恵を感じる派です。
698 :
デフォルトの名無しさん :04/01/02 21:46
>>696 うちの開発じゃ規約から外れた書き方はマイナス評価対象だけどな。
>>698 まともな開発セクションならそうだと思う。
好き勝手に書かれたら保守できなくなるから、
社内で十人十色は避けるべき。
しかし、それはローカルな「社内ルール」であって、
どうルール化するかはユーザそれぞれに
事情があるわけで、ひとつには決まらない。
結果として、すべてのプログラムにあてはまる
コーディング規約というのは存在しない。
むしろ十社十色というべきだったかな。
>>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って....?
ゴメンナサイ、なんかイヤミったらしい文章になってました。 反省してます。 しかも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 そんなシート無いから。とか。
ワークブックが二つ開いてるとか。
>>707 ForEach文でうまくいきました。
お陰で助かりました。
ありがとう。
714 :
デフォルトの名無しさん :04/01/07 01:29
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 お粗末さまでした
>680でマクロ名の勝手な変更の件で質問したものです。事後報告します。 その後エラー終了以外では症状は出なくなりました。しかしエラーそのものは たまに起きるので同様の症状になります。そこでググり全ブックに ”挿入→名前→定義→削除”を実行したところマクロ名が正しいものに直ってしまいました。 こんな定義した覚えはありませんが、なんらかで増えていき複雑なリンクになってしまったようです。
今後VBAはVC#A.NETになるのかが気になる今日この頃・・・
>>718 VB.NETAになるから質が悪いです。
どちらにせよ、現行マクロが使えるかどうかが激しく不安...
質問させて頂きます。 チェックボックスのチェックされる箱型の部分(レ点が入る部分)のサイズを変更したいのですが。 そんなの無理なんでしょうか?
できないような気がする それらしいプロパティ無いみたいだし
>>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イベントつかって非同期にしたほうがよかろ
あるワークシートをアクティブにしたまま、他のワークシートのセルの値を取得することってできますか?
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の長さに合わせたいのですが教えてください。 言ってる意味がわかんねぇ
>739 あの聞き方でわかるんならお前が答えてやれば
やっといつものVBAスレっぽくなってきたな。 ....つまらん。 ListWidth プロパティ コンボ ボックス (ComboBox) コントロールのリスト部分の幅を設定します。 構文 object.ListWidth [= Variant] ListWidth プロパティの構文は、次の指定項目から構成されます。 指定項目 内容 object 必ず指定します。オブジェクトの名前を指定します。 Variant 省略可能です。リストの幅を指定します。0 を設定すると、コンボ ボックス (ComboBox) コントロールの幅と同じになります。既定値は、コントロールのテキスト部分の幅と同じになります。 解説 複数の列から構成されるリストの場合は、できる限りすべての列を表示できる幅を設定してください。 ヒント コンボ ボックス (ComboBox) コントロールをデザインするときは、表示するデータと併せて垂直スクロール バーも表示できる幅を設定してください。
2004〜2007の値の場合、4桁分の幅にしたいってことかな? それで、30000とか出てきたら、それに合わせて5桁分に広がってほしい。 不必要に幅が広いから気に入らない。 こういう意味だと思うが。
コンボボックスを必要以上に狭く作ると
なんか
>>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 を見て、そんな疑問がわくようじゃ答えられるはずも無いから、もう書き込まなくていいよ。
質問があります。 ユーザー設定のツールバーの名称を動的に変更したいのです。 具体的に言うと、名称を特定のシートの特定のセルに入力された値にしたいのです。 マクロ登録でやってみましたが分かりません。 WIN98SE、EXCEL2000です。 よろしく御願いします。
CommandBarのNameプロパティ
すみません、質問させてください。 エクセルで記録したマクロを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で動くにはどのような記述をすればわかりません。 どなたかご教授おねがいいたします。
別の方法で、マクロを使わずに事故解決できました。 もうしわけありませんでした。
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.全部移動させて空行があったら参照ファイルから同じ行をコピー
すみません、 >最後の「作業ファイル$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 あえて言わせてもらうと、アクセス買ってきてクエリで処理したほうがよくないですか?
回答頂きありがとうございました アクセスは敷居が高いと思っていたのですが、よい機会ですのでそちらも勉強してみることにします
>>757 この程度なら
Excel VBA でできると思いますが、
サンプルコードを書くのはつらい。
結局全部書くことになりそうだから。
762 :
デフォルトの名無しさん :04/01/16 13:06
MsgBoxの表示位置って指定できるのでしょうか? 今、Excel2000でグラフ表示のマクロを組んでいます。 Do グラフ表示処理 確認 (再表示 or 終了) If 終了 = True Then Exit End If Loop みたいな処理なのですが、 確認を、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
>>771 declare 目的のWinAPI名
で、ググればそれ相当の情報が得られますが。
アドインマネージャーには表示できてるの? 表示できていれば選択してロード方法のところにチェック入れてやるだけのはずだけど。
>>770 出来ました。
新たな方法として、キャラクターコード13をクリップボードに入れてからペーストする方法を
とっていたんですが、この方がスマートですね。
有難うございました。
779 :
デフォルトの名無しさん :04/01/18 20:19
A個の中からB個取り出す組み合わせを全部表示させるには、 どうしたらよいのでしょうか? さらにその組み合わせに確率の高いほうから上位何個まで といった条件を反映できるようにしたいのですが。
>>779 一応聞くがパスワード区落下とかメールアドレス作成ツールとか、そんなん?
>>779 まずは日本語からやり直せ。
VBA以前の問題だ。
いえ、ただの数字の組み合わせを出したいだけです。 説明不足ですみません。
>>779 出現確率はすべて等しいので上位も下位も無い。
〜終了〜
目の前は生きる意味がない・・・ 豚どもの戯言はもう聞きあきた・・・ 俺にはもう未練はない 俺にはもう大切に思える人もいない さぁ、一緒に旅立とう 黄色い鴉が僕らを待っている
>>786 このレスも、ある特殊な計算でだします。
>>779 VBA必要ない
数字の組み合わせだけでなら0から10^B-1までの値をオートフィルでつくれ。
上位が欲しいなら計算した確率にソートかけれ。
10^(B+1)-1のまちがい
790 :
デフォルトの名無しさん :04/01/19 10:46
vb.netを使って、Excelオブジェクトを操作し、 ワークブック(ワークシートのセル)に対して、データの流し込みをやっています。 こんど、ワークブックにたいして、vb.net側で作成したVBAマクロを 流し込むよう依頼が来て、ほとほと困っております。 Application.RecordMacroなるメソッドを利用するのかと思いますが、 一切流し込めていません。 なにか、いい方法をお持ちのかた、情報をくださいませ!
無理
以前質問した者です。 また質問させて下さい。 今、ワークシート上にテキストボックスを配置しているのですが、テキストボックス内では 右クリックをしても何もメニューが出ません。 コピー、切り取り、貼り付けだけでよいので出来るようにしたいのです。 右クリックしてメニューさえ出来るようになれば、後の方法は分かるんですが・・・。 下記の様に記述してもエラーが出ます。(貼り付けの例です。) どなたか、教えて下さい。 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
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 シートのメソッド見れば分かるだろうに
>>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まちがえました。最初のやつと一緒です。
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
手入力にセルで"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 使ってみれ
経験談より
>>818 さん
あっさりと解決できました。ありがとうございました。
実は、getopenFilename も最初にテストしてて、保存用があるはずだ!
と思ってやっていたけどわからなかったんです。
有難うございました。
820 :
デフォルトの名無しさん :04/01/24 01:44
選択した領域のRangeオブジェクトに含まれているセルを1つずつ参照した いのですが、どうすればいいですか? セルの数はCountでわかりますが、離れた複数の領域かもしれないので、 Rows.Count,Columns.Countは使えません。
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))
な感じ?
>>797 有難うございました。
出来ました。
また、何かありましたら御願いします。
>>794 で後の方法は分かると書いておきながら質問しにくるな。
あまつさえまただと、おまえ甘えすぎ
828 :
デフォルトの名無しさん :04/01/25 00:27
Excel VBAを書いているとよくファイルがぶっ壊れるんですが、俺だけですか? 特に、ユーザーフォームやコントロールツールボックスを 使っているときに頻発するんですが。
Excel使ってるとよくパソコンがぶっ壊れるのですが、俺だけですか?
831 :
デフォルトの名無しさん :04/01/25 13:06
VBど初心者です。申し訳ないですが、ブロックIF文を使って1000までの 素数を出力するにはどういうプログラムにすればいいんでしょうか・・・。 さっぱり訳がわかりません・・・。お願いします。
>>831 遅くて良いならカウンタ変数iが(i - 1)〜2で割り切れないと素数。
>832 ははあ、なるほど、どうも。うーん、ただ整然と並べて出力がうまくできないんです よねえ。まあなんとかがんばります。
834 :
デフォルトの名無しさん :04/01/26 00:34
エクセルマクロを起動するとき スプラッシュウィンドウでオープニングを飾りたいのですが (PhotoShopの起動時みたいな) 頑張ればできるのでしょうか? 無理なのでしょうか? 別途、外部DLLをインストール等は面倒になるので それはしないで実現したいです。
>>834 auto openとユーザーフォームで良いんでは?
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
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にはそんなもの無いぞ もしかして釣りですか?
847 :
デフォルトの名無しさん :04/01/29 17:46
縦に長いシートを印刷する際に ブランクになっている行を切り詰めて印刷したいのですが上手くいきません 流れとしては If文で選択した行がブランクかどうかを判別 ↓ ブランクでなければActiveSheet.PageSetup.PrintAreaを使ってセルをアクティブにする ↓ For文でこの作業をシートの上から下まで繰り返す ↓ アクティブなセルを印刷用のSubに送る このように考えています 何かよい方法があったら教えていただけますでしょうか よろしくお願いします
849 :
デフォルトの名無しさん :04/01/30 05:15
エクセルVBAで作ったプログラムがシート数8、650KBのファイルになったわけですが、 起動に1分半かかってしまいます。つまり、異常に時間がかかってしまいます。 起動時間を短縮する方法があるとすれば、どのあたりでしょうか。 そもそも、起動に時間がかかるということが、 どういうことなのか解かっておらず、見当がつきません。 起動時にコンパイルされて、時間かかってるとか? 素人なものですみません。 あとは、確保するメモリを減らすことくらいを考えていますが。 何かヒントあれば教えて頂けますでしょうか。お願いします。
>847 オートフィルタで「空白以外のセル」を抽出して印刷じゃダメ?
851 :
デフォルトの名無しさん :04/01/30 09:41
エクセルにアドインで追加した、メニューとツールバーがあるのですが、 これらを実行するときに、パスワードを入力させるようにしたいのですが、 何か良い方法がありますでしょうか?
852 :
デフォルトの名無しさん :04/01/30 13:25
853 :
デフォルトの名無しさん :04/01/30 13:31
VBA程度でさえも習熟できないバカがいるのか、この板はw
ぅんぅん 使ったことないとかんたんだよね
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
ごめん。セルの表示をマウス乗せるだけで変えるのは、多分できない。 ユーザーフォームと勘違いした。 にわか喜びさせてすんませんでした。
864 :
デフォルトの名無しさん :04/01/31 21:56
エクセルでDBからデータを吸い出すマクロを書いています。 実行時間が長かったりすると、エクセルが画面蒼白になってしまい ちょっと(かなり)キモイです。 プログラム走っている間は画面書き換えがされないのでしょうが、 エクセルのマクロってこういうものなんでしょうか? プログレスバー付きのダイアログかなにかオープンして 「ちょっとまっててね、うふ」的なことをやりたいのですが みなさんはどう対処されていますか?
>864 Application.ScreenUpdatingをFalseにして描画を止めるか、 逆にDoEventでこまめに描画を更新すれば、キモイ度は減る。
>>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$とか介して他の配列に入れ直すわけ?
>>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 テストしていないので、うまくいくかどうかは分かりませんが、
[シート毎に計算させる場合]
(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
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 ()に引数入れろと 言われます、()には今選択されているアクティブなセル番号を入れたいのですが どうしたらいいのかわからなくて困ってます。 更にこれだと現在のセルの内容をひたすらコピーすることになってしまう と思うのです。→で移動するたびにコピーしてくれるようにするには どうしたらいいでしょうか? どなたかアドバイスくださると助かります。よろしくお願い致します。
自己解決しました。 イベント処理のところに記述したらうまくいきました。 VBAは初めてで勝手がわからず、もうだめだと思いましたが イベント処理したらあっさり完成したので拍子抜けです。 基本的なことを学ばず、いきなりコードを貼り付けて動かすのだから 躓くのは当たり前だと思うのですが、とりあえず上手くいったのでほっと してます。 どうもお騒がせいたしました。
セルに入っている6桁の数値を年月日と読みたいのですが、どうすればいいでしょうか? A1に031225と入ってるときB1に2003、C1に12、D1に25となるようにしたいのです。 妙案があればご教授ください。
895 :
デフォルトの名無しさん :04/02/04 18:38
>>894 それって人に質問するような難しいことかなあ。。。
ちょっと自助努力足りなすぎると思うけど。間違い無くヘルプを検索なんて
してないでしょ?
それにそんなのエクセルの関数だけでもできるような気が。
>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覚え始めた初心者ですみませんが・・・ := ↑この演算子ってなんですか???
Array関数で一括セル参照するのと 変数 = Range("XX") を必要に応じて繰り返すのは どっちがウマーでつか。速度的には変わらんような
905 :
デフォルトの名無しさん :04/02/10 00:06
シートに貼ってある図(絵)をBitMapで保存する方法を おしえてくれくれ。
シートの中で同じ文字列の出てきた回数とその文字列を返すような 関数ってありますでしょうか?文字列の出てきた回数ごとに色を つける処理をさせたいと思ってます.
>>905 画像を右クリックでクリップボードにコピー。
MSPAINT などの画像ソフトに貼り付け。
BMP 形式で保存。
>> 906さん ありました.countifでなんかできそうな感じなんですけど, 第2引数はセルの値をかたっぱしから入れってて調べないといけない のでしょうか?
911 :
デフォルトの名無しさん :04/02/10 04:21
質問です。 タブ区切りのテキストファイルがたくさんあって、それを処理したいんですが、 開いてから保存しようとすると確認のダイアログが出てしまいます。 このダイアログを出さないで元のファイルに上書きするにはどうすればいいんでしょうか。 SaveとSaveAsを両方やってみたのですが、うまくいきません。
>>911 Application.DisplayAlerts = False
す、すまん VBAでだす。
914 :
デフォルトの名無しさん :04/02/11 00:20
Excel2000で、シートに貼り付けたボタンを削除する処理をデバッガで動かすと、 「中断モードのため入力できません」というエラーダイアログが出ます。 (継続するとボタンの削除には成功しますが、他のシートの変数が初期化されたり、 不具合が出てしまいます。) このエラーを回避する方法を教えて下さい。お願いします。 ActiveSheet.Shapes("CommandButton1").Select Selection.Delete ←ここにブレークを張って、ステップした時に出る。
そういった不具合が発生するからエラーで教えてくれてる。 それを無視してるんだから当たり前。 通常使うときにはブレークさせないんだから回避する必要なんて無い
>>915 屁理屈はイイから外に遊びにいっといで。
>>915 通常使う時に、他のシートの変数が初期化されてしまうのが問題です。
その原因を探るためにデバッガで動かしました。
ワークシートでコントロール貼ったり削除するとワークシートクラスはリセットされる。 マクロだろうが手動だろうが同じ。 どうしても消さないといけないなら処理途中はVisible=Falseにしておいて 終了処理のときに消せばいい
>>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 このチェックボックスのキャプションを変更したいのですが、どうしたらいいのでしょうか
すみません 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
>>930 ありがとうございます。
できなかったら1文ずつ入力する覚悟でした、助かります。
>>925 ,927
ありがとうございます。
pathでしたか・・
wordなのでActiveDocument.Pathってやったら出来ました!
933 :
デフォルトの名無しさん :04/02/19 18:17
お助けください。 ファイルの「上書き保存」と「ファイル名を変えて保存」をできないようにする方法ってありますか?
934 :
デフォルトの名無しさん :04/02/19 18:41
>>933 BeforeSaveイベントでCancel=True
937 :
デフォルトの名無しさん :04/02/20 02:02
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 ,947
ありがとうございました。
実装できました。
すいません テクニックを教えてください。 エクセルのマクロに ある関数を作りまして シートのセルから フォーカスが別のセルに移った時に この関数を呼び出ししたいのですが どなた様かおしえてください
950 :
デフォルトの名無しさん :04/02/25 17:34
>949 シートモジュールの、セレクションチェンジイベントプロシージャを使えばよろし。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'ここにプロシージャの名前を書こう。 End Sub
>>950 解りやすい説明をありがとうございました。無事解決しました。
952 :
甲羅のカメ :04/02/25 19:25
16進数の"E291"を10進数に変換して"58001"を表示させたいと思っています。 Val関数を使って変換させるのだと思いますが、Val("&hE291")とすると"-7535"になってしまいます。 なにか良い方法はあるのでしょうか? 教えてください。
HEX2DECでHELPしてみ
どうもありがとうございます。 さっそく明日に試してみます。
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
セルになにも書いてないんじゃね?
>>956 すいません。初心者なんで・・・。
著書ではセルAに123と書いてあって、1000回処理してるみたいです。。
真似してみましたが、わかりません。
例えば、何を書けばいいのでしょう?
こんな初心者なのでダウンロードしてもウィルスとか入れてないです。 てか、作れません。
なにがしたいマクロなのか、よくワカランが A1〜A1000までにテキトーになんか書いて実行してみそ
961 :
デフォルトの名無しさん :04/02/26 13:55
渡された文字列が、数字であるか否かを 判断する方法を、諸賢方、教えてくだされ。
isnumeric?
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
>>960 コピー機能を使って1000以上になったところで
マクロを実行したら出来ました。
有難う御座います。
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なんか使わなくても、簡単にできるんだから、
悩む前に、ちょっと調べればいいのに。
>>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でどのようにやればいよでしょうか?
あぁぁすみません、上のやってみたらできました。。
977 :
デフォルトの名無しさん :04/02/28 16:22
>>973 eRow = Range("a1").SpecialCells(xlCellTypeLastCell).Row
eCol = Range("a1").SpecialCells(xlCellTypeLastCell).Column
これでいかがでしょうか。
>977 うまくいってるみたいです。ありがとうございました。 ついでに教えてチャンですみませんが、エクセルの2つのシートを比較 して、その差分をとるのにいい方法はありませんか? 最終列と行のループでぶん回して、異なっているデータセルのみを色付きで表示 するマクロを作ってみましたが、速度が遅くていまいち気に入りません。
>>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
>977 だいたいそんな感じでやってます。 想像していたより遅かったのが嫌だったけど、使用に耐えないほど ではないのでまあいいかとも思ってます。 レスさんきゅーでした。
981 :
デフォルトの名無しさん :04/02/28 23:06
印刷範囲の設定で Worksheets("sheet1").PageSetup.PrintArea = "a1:d5" とやったのですが、D5の部分の5をLastRowに入っている数値にしたいのですが、 どのように設定すればよいのでしょうか? = "a1:d(LastRow)" とか試してみたのですがわかりません。
>>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なんてメンバはない?
いや、Addressのスペルが間違ってるだけ。 いかがでしょうか?
>>987 なるほど、こう言うのをコンパイル時に指摘してくれないのがVBの怖いところだな。
991 :
デフォルトの名無しさん :04/02/29 22:42
すみません 時間がなくて過去ログあんまりちゃんと読んでないのだけど 既出だったら誘導してください いま明日までにやらなくちゃいけなくててんぱってます エクセルのソルバーアドインを1行ずつ使っていくマクロをつくったのだけど このままでやると一回ソルバーを使うごとに 探索結果 解を記入する OK とかいうダイアログが出てきてわざわざリターンをおさなくてはなりません このOKをおすまでのマクロをつくりたいのだけど記録しても出てきません どうしたらよいでしょうか? おしえてください
>>991 ソルバーは使ったことないのでわからんが、
ソルバーを使うコードの前に
Application.DisplayAlerts = False
と書けばいいと思う。
これでいかがでしょうか。
>>992 やってみましたがうまくいきません
ダイアログが出てきてしまいます
やっぱり一発ずつリターンを打たなくてはならないのでしょうか?
4万行ちかくあるのでどうしても何とかしたいのですが・・・
なきそう
よくわからんけど、配列はできないのか?
>>991 SolverSolveっていう記述を
SolverSolve(True)に変えてみてください。
うまくいきましたーーー 今動かしてるところです 本当にどうもありがとうございました 助かりました
997 :
デフォルトの名無しさん :
04/03/01 08:07 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つの方法以外に配列の平均を求める方法はあるのか? 教えて、偉いしと。