Excel VBA 質問スレ P ..
175:デフォルトの名無しさん
10/04/29 14:42:01
ここで一番多いのは警備会社勤務
2ちゃんの質問スレで困ってる人を見つけたら助けるふりして雑談始めるのが仕事
176:デフォルトの名無しさん
10/04/29 14:46:30
事務員だけどVBAできます・・・・というか、IT屋のPGとして開発経験があれば、
プロジェクト規模とかステップ数でPGとしての職歴をアピールできるのかもしれないけど、
そうでない場合はアピールしようが無いというか、何をもってできるとするのかよくわからん。
177:デフォルトの名無しさん
10/04/29 14:47:28
>>175
自宅警備会社というやつですか?
178:デフォルトの名無しさん
10/04/29 15:01:55
>>177
自室です。
179:デフォルトの名無しさん
10/04/29 16:14:27
>>173
ネットが繋がらない環境でJava使ってる。
VBAは各種ファイルの生成とか、XMLやらブックの解析とか。
180:デフォルトの名無しさん
10/04/29 17:08:26
お話に花が咲いているところ すみません。教えてください。
office2000 XP SP3 です。
PCのCOMポートから、RS232Cで文字を受信して、Excelシートに表示しています。
while(1)
if (受信文字=あり) then
Cells(y, 1).Value = 受信文字
y = y + 1
endif
wend
という感じです。
いい感じに動作するのですが、シートの一番下の行まで行って、
次の行を書くときに、スクロールしたいのですが、
画面1行スクロールをするには、どのような記述をするのでしょうか。
宜しくお願いします。
181:デフォルトの名無しさん
10/04/29 17:20:05
URLリンク(officetanaka.net)
182:デフォルトの名無しさん
10/04/29 18:08:21
Application.Calculation = xlCalculationManual
で、関数の計算を止めた場合、
WorksheetFunction.Maxなどで関数をVBA内で使用(シートへの記載は無し)したら、
その計算結果を利用する判定時に誤作動したりするのですか?
やはり直前でxlCalculationAutomaticに戻さなくてはいけないのですか?
183:デフォルトの名無しさん
10/04/29 18:24:43
お話に花が咲いているところ
嫌味言うなら質問するな
184:デフォルトの名無しさん
10/04/29 20:40:06
気の利いたこと言おうとして失敗する人っているよね。
その一言が余計、という。
「へえ。君って○○大学出てるんだ」
「いやあどうしょうもないバカ大学でお恥ずかしい(謙遜のつもり)」
「……俺の息子はその大学を第一志望にして入学したんだよ(怒)」
185:デフォルトの名無しさん
10/04/29 21:11:20
つ Ca
186:180
10/04/29 22:37:54
どうもありがとうございます。大変助かりました。
VBAの命令は、何でもあるんですね。ビックリしました。おかげさまで、なんとか作れそうな感じです。
以下のような感じで、現在の画面の最下行数を計算して
temp_str = ActiveWindow.VisibleRange.Cells(1, 1).Address ' 現在の画面の左上セルの座標「$A$123」を文字で得る
n = InStr(1, temp_str, "$") ' 左の$を見つける
n = InStr(n + 1, temp_str, "$") ' 右の$を見つける
y = Val(Mid$(temp_str, n + 1, Len(temp_str) - n)) + Windows(1).VisibleRange.Rows.Count ' "123"を取り出し、画面の縦の数を加算
この行数と、次回の書込予定セルのy位置と比較してスクロールしながら、書き込んでいくつもりです。
ここで、もう少し教えてください。
上記の最下行の計算ですが、VisibleRange.Cells(1, 1).Address の返値が文字で返ってくるので、めんどうな文字計算をしています。
これが、直接数字で返ってくる命令はないものでしょうか。
temp_str = ActiveWindow.VisibleRange.Cells(1, 1).Address というのは、現在のアクティブウインドウに対しての命令だと思います。
しかし別シートを開いている時でも、文字書込は決まったシートに バックグラウンドで実行したいのです。
シート指定をすればいいと思って
a = Worksheets("AAA").VisibleRange.Cells(1, 1).Address
などと やってみましたが、エラーだと言われました。
どのように書いたら、バックグラウンドで実行できるのでしょうか。
よろしくおねがいします。
187:デフォルトの名無しさん
10/04/30 00:43:47
>>184
その会話で気の利いたことを言った(つもり)のはどっち?
188:デフォルトの名無しさん
10/04/30 00:45:56
>>186
a = Worksheets("AAA").Range(hoge).Cells(1, 1).Address
189:デフォルトの名無しさん
10/04/30 11:02:24
>>186
Visibleってのは「見えている」範囲のこと。ウィンドウを「切り替えたら見えるだろう」範囲ではない。
だから裏画面では意味がない。
190:180
10/04/30 19:02:09
教えてくださいますでしょうか。
cells(1,1) と range("A1")という、2つの表現方法がありますが、
forで回すことを考えるとcells(1,1)のほうが都合が良いと思います。
しかし、range()も使いたいことが多いです。
そこで、この(1,1)という値を"A1"に変換するような関数はあるのでしょうか?
現在は、
dim array as string
dim rng_str as string
array = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
x = 1
y = 1
rng_str = mid$(arry, x, 1) & format(y)
などとやっています。
何か1発でできる関数があると便利なのですが。
191:デフォルトの名無しさん
10/04/30 19:13:14
>>190
アドレスとかじゃ本末転倒か
192:デフォルトの名無しさん
10/04/30 19:23:11
そうですね。できれば、aaa = Conv(1,1)みたいな感じの物がVBAに備わっていることを期待しているのですが、
やはりむずかしそうでしょうか。
あと、もう1つよろしいでしょうか。
セルを選択するのと反対に、解除するのにはどのように書けばよろしいでしょうか。
選択は、セルの周囲の線が太く見えて、解除は、セルの周囲の線が太くなくなるということです。
選択 cells(1,1).select
解除 cells(1,1).Deselect と書いたら、叱られてしまいました。
193:デフォルトの名無しさん
10/04/30 19:43:52
>>190
rng_str = Cells(Row, Col).Address(False, False)
とりあえずこうするといいよ。
194:デフォルトの名無しさん
10/04/30 21:17:14
>>187
>その会話で気の利いたことを言った(つもり)のはどっち?
二つ目の鍵カッコだよ。
この会話では、相手が不機嫌になった理由を教えてくれたから、
「ああ、俺余計なこと言ったな」と本人も気づくけど、
普通は腹の中で「この野郎」と思ってもわざわざそれを伝える人は少ない。
結果、本人はずっと「俺ってユニーク」などと思い込んだまま、
他人をイラつかせ続けることになる。
まあ、俺のことなんだが。
195:デフォルトの名無しさん
10/04/30 21:59:14
>>192
行列の変換は Chr(64 + y) & x
ただしZ列より右は表現できない
AA列以降もサポートしたいなら自分で関数を作ってモジュール化すればいい
セル選択の解除は不可能
196:デフォルトの名無しさん
10/04/30 22:01:57
>>192
一般機能で出来ないことはvbaでも出来ない。
シートの中で必ず1セルは選択されているものだから、vbaでもどこかのセルは選択しないとあかん
197:デフォルトの名無しさん
10/04/30 22:05:08
何でもいいけどいい加減>>182に答えてくれよ!
さもないと自分で調べるぞ!!
198:デフォルトの名無しさん
10/04/30 23:29:49
>>193
ありがとう。Row=1, Col=1 → A1 と出ました。ありがとう。
これで楽になりそうです。
>>195, >>196
>セル選択の解除は不可能
>シートの中で必ず1セルは選択されているものだから、vbaでもどこかのセルは選択しないとあかん
そうなのですね。ありがとうございました。
確かに、自分でExcel使うときは、どこす1箇所選択されています。
助かりました。ありがとうございました。
199:デフォルトの名無しさん
10/05/01 15:32:28
>>197
調べろよw
あと手動計算にしなくても再計算すればよろし
マクロの記録でF9だ
200:デフォルトの名無しさん
10/05/01 17:57:32
ていうか再計算止めたからってWorksheetFunction
の計算まで止まるわけないだろ。
むしろ発想自体新鮮w
201:デフォルトの名無しさん
10/05/01 19:46:16
/ ̄(S)~\ < >
/ / ∧ ∧\ \< 嫌なら見るな! 嫌なら見るな! >
\ \( ゚Д,゚ ) / /< >
\⌒ ⌒ / ノ Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Yヽ
)_人_ ノ
/ /
∧_∧ ■□ ( ))
( ; )■□  ̄ ̄ヽ
γ⌒ ⌒ヽ  ̄ ̄ノ ノ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
202:デフォルトの名無しさん
10/05/01 22:37:18
>>199-200
自分で調べるのが面倒だからこその質問スレだろうが!
情弱なめんな、ゆとりなめんな質問に答えてくれて本当にありがとうございました。
203:デフォルトの名無しさん
10/05/01 22:41:08
↑
冷静な自己分析だと思うぞ
204:デフォルトの名無しさん
10/05/02 06:25:26
>>202
>自分で調べるのが面倒だからこその質問スレだろうが!
自分で調べてもどうしてもわからない時の質問スレだよ。
別に2chじゃなくとも、人に教えを請う時はそれが当たり前だと思うが。
205:デフォルトの名無しさん
10/05/02 06:59:03
↑
2ちゃんの画一的なコメント 乙
206:デフォルトの名無しさん
10/05/02 12:09:35
てか教えてGooに行けばいいんだよな
207:デフォルトの名無しさん
10/05/02 12:47:44
-‐''''"´ ̄``ヽ、 ____
/ _ ヽ //´ __,,>、
/  ̄ ̄ { /::/ / ̄:::::::::::::::\
l _ィニニア二二二ニヽ、j._ /::::l/::::::::::::::::::::::::::::::::l
| 0Lj/-‐-レノ ノ_ヽ:::`ヽ l:::::::::::/l/lノノ/_イ:::::l
レ:r、/ イ゚テ ピト`|::| l:::::::::/ rtテ、 .ィtq l::::::|
l:lヘ '" ,j '"/ノ |::lヘ!j ´ ,j !;:::/
ヽヽ、 r‐-, /' レリー 、 ,...., lノ/
lヽ、  ̄ / `ヽ、lヽ 、  ̄ /´
_,r┴‐-`v´-‐j-、__ , -‐-、_r┴─'ー‐チト バルス!!
/ ̄/:.:.:.:| ̄ ̄`T ̄´|:.:.:.:l´ `ヽ / ヽ ̄`ー-‐'´`''''⌒ヽ
/ ,':.:.:.:.:.l l l:.:.:.l \ _r‐、-、-、r, 、 ',
|:.:.:.:.:.:.! ! !:.:.l ,. -‐ゝ/// 〉 〉 〉 〉 〉 ! ',
l:.:.:.:.:.:.l | l:.:.:l / 人〈〈〈〈 ' ' ' /っ l l
l:.:.:.:.:.:.! ! l:.:.:.ト/ / ```´-ァ‐'''" / l
、__/:.:.:.:.:.:l | |:.:.:ヽヘ l // / _ ィノ
/:.:.:.:.:.:.:! l |:.:.:.:.:l `ーヽ、_ノ´l、______/lニ二」
____l:.:.:.:.:.:.:.| l |:.:.:.:.:! |_ ( ( ) )_〕| l
l`ー‐‐'匸二l ̄ ̄l二フーイ /  ̄ `‐‐'´ ヽ |
208:デフォルトの名無しさん
10/05/02 15:58:59
> 意思決定までコンピューターが出来るようになると、
> 人間自体が必要なくなる。
今でもほとんど「意思決定」に人間なんか要らないだろ。
1. 提案者「こんなアイディアがあります」
2. 決定者「費用対効果を数字で示せ」
2. 提案者「費用が○○円、利益が△△円を見込んでいます」
3. ○○ < △△か?
true → 4.へ
false → 5.へ
4. 決定者「そのアイディアを採用する」
→ 6.へ
5. 決定者「そのアイディアを却下する」
→ 6.へ
6. 決定者「次のアイディアはなんだ?」
結局のところ、「意思決定」(笑)とやらをやる人間はこんなロジックで動いているんだから、
人間なんかおく必要ない。Excelどころか、20年前のPCでBASICで組んでもいいレベル。
「費用対効果を出せ」「数字で示せ」「説明責任を果たせ」、って言うと非常に説得力が
あるように見えるけど、実は判断基準のなすりつけなんだよね。
209:デフォルトの名無しさん
10/05/02 17:06:47
>>208
んじゃそのプロセスをマクロで表現しなよ
210:デフォルトの名無しさん
10/05/02 21:18:22
質問させてください。
A列にx軸の値、B〜H列に7系列分のy軸の値が書いてある表で、
A,B列の値を選択してグラフを書かせるとA列をx軸、B列をy軸(系列1)としてくれるのですが、
A〜H列の値を選択してグラフを書かせるとx軸はblankで、A〜H列全てがy軸(系列1〜8)になってしまいます。
A列をx軸にして7系列分のグラフを書くにはどのように工夫したらよいでしょうか。
211:デフォルトの名無しさん
10/05/02 21:54:14
あなたは知らないのですか?
212:デフォルトの名無しさん
10/05/03 13:25:00
>>210
グラフの種類を散布図にして
元データの設定ウィンドウでY軸からA列を消して、X軸にA列を追加
213:デフォルトの名無しさん
10/05/04 21:21:37
エクセルのサイズが500MBに届きそうなんだがこんなもんか?
214:デフォルトの名無しさん
10/05/04 22:22:06
こんなもんかと聞かれても困るな w
まぁ常識的に考えて肥大しすぎだとは思うが w
215:デフォルトの名無しさん
10/05/04 22:53:39
URLリンク(peiyorin.cocolog-nifty.com)
これ以外にもシートをコピー→新しいブックの新しいシートに貼付け も効果があるらしい
(シートタブからのシートのコピー はダメ)
216:デフォルトの名無しさん
10/05/04 23:40:10
>>215
それやると、セルの幅はコピーされない(初期状態のまま?って言うの)んと違うかったっけ?
217:デフォルトの名無しさん
10/05/04 23:50:05
>>216
? 普通に書式も一緒にコピーできるけど?
218:デフォルトの名無しさん
10/05/05 00:33:09
ページ設定がコピーされないんでそのまま印刷するとおかしくなるだけ
219:デフォルトの名無しさん
10/05/05 12:47:49
>>210
Excelは、変なお節介があり、ユーザーは動作の予想ができないので、
覚えにくいし、使いにくいですよね。
さて、具体的な方法は自分で考えてもらうとして、イメージを説明します。
グラフを作るとき、多くの場合は、希望するデータ範囲を囲って、
グラフボタンで進んで行って「グラフできたぁ」となるワケですが、
これは、EXcelのお節介な自動機能でグラフを作っているだけなので、
覚え始めのころは「このやり方が全てだ」と思い込んでしまいます。
僕もそうでした。しかし、この方法では、いつかは行き詰まります。
本来あるべき論としては、「この列のデータを、あの列のデータに対してグラフ化したい」だと思います。
このやり方が、本当のグラフ作成なのですが、
Excelのお節介で、私たちは、それが想像しにくいようになっています。
範囲を選択して、グラフボタンで、グラフウィザードを進んで行きますが、
そのウィザードの途中に、次のような画面が出てきます。
URLリンク(mcnc.hp.infoseek.co.jp)
この画面では、すでにEXcelが勝手に選んだ「系列1,系列2」というY軸の値が選ばれています。
まずこれを削除します。そして、その右側の「Xの値」「Yの値」の所の文字も消して、
その枠の右側の三角?っぽいボタンを押します。
すると、ウィザードを開いているのに、なぜかシートに触れてしまいますので
自分の好きなY軸の範囲を選択します。同様にして、Xの値も範囲を指定します。
これで、EXcelのお節介なく、自分の好きな軸に、自分の好きな範囲を指定してグラフが作れます。
この方法は、既に出来上がっているグラフに対しても可能でなので、
自分で調べて見てください。
僕の思うグラフの作成は、「これをXに、これをYに」という指定をするのが正しい方法、
というかユーザーがイメージできる作成方法だと思っています。
Excelやワードのお節介が減ることを期待したいです。
220:デフォルトの名無しさん
10/05/05 13:32:18
VBAの話をしろボケ
221:デフォルトの名無しさん
10/05/06 00:23:24
>>219
なかなか面白い話しやけど、確かにスレ違い。
222:デフォルトの名無しさん
10/05/08 17:44:55
配列に数が入っている状態で,
平均値などを計算したい場合,
一度,シートに書き出してエクセルのaverage関数を使うしかないのでしょうか?
223:デフォルトの名無しさん
10/05/08 17:47:19
いいえ
224:222
10/05/08 17:55:03
>>223
すいません
自分で関数を定義したくはないのですが
そのようなサブルーチンがvbaにも実装されているのでしょうか?
225:デフォルトの名無しさん
10/05/08 18:11:12
WorksheetFunction.Averageって配列を受け付けられなかったっけ?
226:デフォルトの名無しさん
10/05/08 18:49:16
配列できるね。
227:デフォルトの名無しさん
10/05/08 19:13:10
セルにAddCommentで複数行のコメントを入れようとしてます。
vbNewLineで改行していれようとすると5行までしか入りません。
無限にいれれるようにするにはどうしたらいいでしょうか?
228:222
10/05/08 19:13:18
例えば,
配列 a[100]
を定義したとして,a[10]からa[i]までの平均値をだしたいのですが
excelの関数で大丈夫ですか・
229:デフォルトの名無しさん
10/05/08 19:24:00
>>228
じゃあ、10〜iまで回せばいいじゃん
230:222
10/05/08 19:49:42
>>229
可変長の部分をa_temp というdouble型の配列を作成,そこに格納し
ave = WorksheetFunction.Average(a_temp)
としても 0 しか返ってきません.
何か間違っていますでしょうか?
231:デフォルトの名無しさん
10/05/08 19:50:24
平均ぐらい自分で出せよカス
232:222
10/05/08 20:13:58
>>231
枯れたサブルーチンがあるなら自分で書くよりミスは圧倒的に減るはずですよね.
なんとかなりませんか
233:デフォルトの名無しさん
10/05/08 20:15:05
この程度でミスしてる時点で他のあらゆるコードが信用出来ない。おまえさんはもう諦めろ
234:222
10/05/08 20:19:47
>>233
vbaは何分初めてなもんで
よろしくお願いいたします
235:デフォルトの名無しさん
10/05/08 20:23:10
何事もほどほどにな
236:デフォルトの名無しさん
10/05/08 20:45:32
>>227
気のせいでした
237:デフォルトの名無しさん
10/05/09 01:21:50
>>234
とりあえず、作ったプログラムを丸ごと貼り付けて
238:222
10/05/09 09:59:16
お騒がせしました.
求めた平均値を入れる変数の型をlong型にしていたため,
常に0となっておりました.
double型に変えると無事動作しました
ありがとうございました
239:デフォルトの名無しさん
10/05/09 15:56:22
あるブックでマクロ実行中、他のブックを操作する方法ないですか?
240:デフォルトの名無しさん
10/05/09 17:08:43
>>239
もう少し詳しく書かなきゃわからんよ
他のブックを操作するとは例えばどんな事?
また、あるブックでマクロ実行中て書いてるけど
どんな処理をしている時を想定しているの
241:デフォルトの名無しさん
10/05/09 19:07:08
>>240
イメージとしてはExcelの二重起動でしょうか
マクロの実行中ってほかのエクセルの編集作業が全くできないと思うんですが、それをできるようにしたいです。
242:デフォルトの名無しさん
10/05/09 19:16:36
そのまんま、Excelを2重起動すればいい。
243:デフォルトの名無しさん
10/05/09 19:25:38
>>239
取りあえずDoEventsでも入れてみれば
244:デフォルトの名無しさん
10/05/09 19:48:48
>>242-243
質問が悪かったです。ちょっと出直してきます
245:デフォルトの名無しさん
10/05/09 20:11:42
自己解決
246:デフォルトの名無しさん
10/05/10 08:04:51
phpのmysql_connect()関数が使えません。
環境は、
windows7
Apache2.2
PHP5.1
mysql server 5.1
です。
普通のphpファイルは開けるのですが、
mysql_connect()を使うとブラウザでページを表示できなくなります。
なぜでしょうか?
247:デフォルトの名無しさん
10/05/10 08:07:15
すいません。誤爆しました
248:デフォルトの名無しさん
10/05/10 23:22:47
図がないシートなのに、保存しようとすると
「図が大きすぎます」エラーが出るのは
どんな理由が考えられますか?
VBAがたくさん使ってあるシートです。
でも、図の類は何もありません。
249:デフォルトの名無しさん
10/05/12 04:09:28
スタックが小さくて、まともな業務ソフトつくれないよ。
マイクロソフトは、あいかわらず、いつまでもユーザー泣かせのことやってる。
250:デフォルトの名無しさん
10/05/12 04:12:14
これだけメモリー搭載が増えてる時代なのになんでスタックを大きくしないのか
不思議でしようがないいよ。
故意にユーザーを苦労させ、エラー出るように設計してるとしか思えない。
251:デフォルトの名無しさん
10/05/12 04:14:37
なんか、日本語版だけ故意にスタック小さくしてるような感じする。
252:デフォルトの名無しさん
10/05/12 07:36:24
スタックが増えても、落ちるまでの時間が多少伸びるだけじゃねえのw
253:デフォルトの名無しさん
10/05/12 12:40:58
VCのスタックサイズのデフォルトは1MBなんだが、VBAではどのくらいなんだ?
254:デフォルトの名無しさん
10/05/12 13:04:22
条件式について質問です。
処理対象データ ↓
A B C D
1 あ い う
1 あ い う
2 あ い う
3 あ い う
3 あ い う
4 あ い う
4 あ い う
4 あ い う
というデータがあるとします。
A列の値が同じである間、同じSheetにデータを出力できるようにし
A列の値が異なる場合になったならば、別シートに出力変換したいんだけども
何かアドバイスを貰えませんか。
255:デフォルトの名無しさん
10/05/12 13:11:08
>>254
Aを上から見ていって、
前の値と比較すればいいでしょ。
Set procRange = [A1]
Set outputSheet =
While procRange <> ""
If procRange.Offset(-1) <> procRange Then
Set procRange = procRange.Offset(1)
Wend
256:デフォルトの名無しさん
10/05/12 13:13:32
途中で投稿されちゃった
動かせる環境ないから適当に直せ
Dim procRange As Range
Dim outputSheet As Worksheet
Set procRange = [A1]
While procRange <> ""
If procRange.Row = 1 Then
Set outputSheet = Worksheets.Add
ElseIf procRange.Offset(-1) <> procRange Then
Set outputSheet = Worksheets.Add
End If
' なんか適当な処理
Set procRange = procRange.Offset(1)
Wend
257:デフォルトの名無しさん
10/05/12 13:21:31
>>256
返答ありがとうございます。
高度な文面なので検索してちょっと理解深めます。
Offset〜〜に解決の糸口を見つけられそうなので
イジイジしてきます。ありがとおおおおおおおお
258:デフォルトの名無しさん
10/05/12 18:19:08
教えてください。
質問の概要
ワークシートの変更を禁止したいです。
説明
・シート内にあるボタンを押すと計算が始まります。
・その計算は、そのシート内のセル内容を読込んで計算するので、シートを変更されると、困ります。
・そこで、計算している間は、シート変更を禁止させたいです。
計算中にシートタブがクリックされたら、このような動きにしたいです。
メッセージボックスを表示して「今はダメよ」と表示する
もしメッセージボックスを表示することで、計算が狂ってしまうなどの問題があるのなら、
最低でも、シート変更を無視、無反応にし、計算を安全にしたいです。
どのようにすれば良いでしょうか?
宜しくお願いします。
259:デフォルトの名無しさん
10/05/12 18:21:51
Application.ScreenUpdateing = Falseじゃだめなの?
260:デフォルトの名無しさん
10/05/12 20:54:35
>>259
ありがとうございました。Application.ScreenUpdating = Falseにより、期待通りの動きが出来ました。
すばらしいです。
ただ、不思議なことがあります。教えていただけませんでしょうか。
以下のように、計算前にボタンの色を変えて、
計算後にボタンの色を戻すようにしているのですが、その色の変化が、うまく動きません。
従来、ScreenUpdatingを入れない時は、ボタン色が正しく変化します。
Button1.BackColor = QBColor(赤) ' 色を変える
Call KEISAN
Button1.BackColor = QBColor(白) ' 色を戻す
次のように、ScreenUpdatingを入れると、
Button1.BackColor = QBColor(赤)
Application.ScreenUpdating = False
Call KEISAN
Application.ScreenUpdating = true
Button1.BackColor = QBColor(白)
白のまま計算を開始して、計算が終わると白→赤→白と、まとめて変化します。
ScreenUpdatingを、' にすると、正しく色が変化します。(再現性があります)
どうしてこんなことが起こるのでしょうか?
宜しくお願い致します。
261:デフォルトの名無しさん
10/05/12 21:24:18
>>260
ボタンの背景色の変更と、その色で画面が更新されるタイミングには実際にはブランクがある為。
VBAマクロ実行中も一定の間隔で画面の更新処理は走るが、
ScreenUpdatingがFalseの時はその処理が妨げられる。
ScreenUpdatingをTrueに戻すと、とりあえず画面全体を更新しなおすので、
後述の処理だとまとめて変化したように見える。
262:デフォルトの名無しさん
10/05/12 23:44:46
できました
263:デフォルトの名無しさん
10/05/13 01:00:39
Button1.BackColor = QBColor(赤)
Call DoEvent
Application.ScreenUpdating = False
Call KEISAN
Application.ScreenUpdating = true
Button1.BackColor = QBColor(白)
だったかな
264:デフォルトの名無しさん
10/05/13 01:03:13
全然違った
スマソ orz
Button1.BackColor = QBColor(赤)
DoEvents
Application.ScreenUpdating = False
Call KEISAN
Application.ScreenUpdating = true
Button1.BackColor = QBColor(白)
265:デフォルトの名無しさん
10/05/13 01:07:09
自作関数をセル上に入力すると、ポップアップで引数の説明文を表示させるようにするにはどうしたらいいのでしょうか。
例えばセル上に "=IF(" まで入力すると
IF(論理式,[真の場合],[偽の場合]) と、表示されますが、
このポップアップ表示されるやつを自作関数でも表示させたいのです。
ご教示よろしくお願いします
266:デフォルトの名無しさん
10/05/13 02:50:22
自己解決
267:デフォルトの名無しさん
10/05/13 17:21:52
>>264
ありがとうございました。なんとか出来ました。
僕のExcel (office2000)だけなのかわかりませんが、教えてもらった方法だと、症状が改善しませんでした。
Button1.BackColor = QBColor(赤)
DoEvents
Application.ScreenUpdating = False
Call KEISAN
Application.ScreenUpdating = true
Button1.BackColor = QBColor(白) 動作結果 ボタンon→KEISAN→赤→白のままなんです。
Button1.BackColor = QBColor(赤)
Call KEISAN
Button1.BackColor = QBColor(白)
Sub KEISAN(){
DoEvents
Application.ScreenUpdating = False
:
:
Application.ScreenUpdating = true
End Sub
のようにKEISANの中に置くと 動作は、 ボタンon→赤→KEISAN→白となります。
でも、解決できて良かったです。どうもありがとう。感謝します。
// ------------------------------------------------------------- //
別件ですが、VBAのエディタについて教えてください。
行頭でTABキーを打つと、カーソルは4文字毎に飛んでいきます。しかし、BackSpaceキーを1回押しても、1文字分しか戻りません。
というか、TABが4スペースになってるみたいです。これを、TABのままにして、BSキー押したときに、1TAB分戻るようには出来ないでしょうか?
ところが、何かの都合?でBSキーで1TAB分戻ることもあります。もう、わけがわかりません。半分怒っています。
これは、どのような時に起こるのでしょうか?
通常のエディタのように動かないので、使いにくくて困っています。すみません。ご存じでしたら、どなたか教えてください。
268:デフォルトの名無しさん
10/05/13 17:31:47
つメモ帳
269:デフォルトの名無しさん
10/05/13 17:38:07
>>267
一般的には、TABで送ったものはSHIFT+TABで戻すんじゃね?
270:デフォルトの名無しさん
10/05/13 17:50:10
>>269
ありがとうございます。Shift+TABを、Excelでやってみました。
VBAエディタでは、確かに出来ました。左に1TABずつ戻ります。初めて知りました。
ところが、秀丸では、Shift+TABは、エラー。
メモ帳では、Shift無視で右にTABしていきました。
text editorは、space4個はspace4個、tabはtab、として置いて欲しいと思っています。
space4個打ったところでは、BS1回で、1spaceが消えればいいし、
tabを打った所では、BS1回でtab1個が消えればいい、というかそのほうが自然だと思うのです。
僕の価値観だけでしょうか。
でも、>>269に Shift+TABを教えてもらったので、今度からはストレスがぐっと減りそうです。
どうもありがとうございました。
271:265
10/05/13 18:11:23
>>266は私のレスではありません。
引き続きお願いします。
272:265
10/05/13 19:04:04
>>271は私のレスではありません。
引き続きお願いします。
273:デフォルトの名無しさん
10/05/13 20:59:53
>>270
Visual StudioやEclipseといった開発環境は大抵Shift+Tabで戻るよ
秀丸の場合、1文字以上選択状態にしてShift+Tabで戻る(サクラエディタも同様)
Tabキーでスペース2個とか4個とかが入力されるようにするのは
スペース派(ソースコード中にタブ文字を一切使わない)には普通のこと。
タブ文字は見る方の環境によって幅が変わってしまうので、それを嫌っている。
ただVBAは専用エディタでしか見ないだろうし、
そもそも設定変更できないのがひどいのは事実
274:デフォルトの名無しさん
10/05/13 21:05:50
あのエディタでリドゥのつもりでCtrl+Yを押すと悲惨な目に遭う
275:デフォルトの名無しさん
10/05/13 21:58:59
いやならバインディングかえればいいのに
馬鹿なの?死ねの?
276:デフォルトの名無しさん
10/05/13 22:06:50
死ねの?
277:デフォルトの名無しさん
10/05/13 22:46:05
死ぬの?─┬―死ぬよ(死ぬ派)
. │
. └―死なないよ(死なない派)
278:デフォルトの名無しさん
10/05/14 07:41:41
時刻の条件式について質問です。
00:15
00:30
00:45
〜〜略〜〜
03:00
みたいな時間がず〜〜〜〜と続くと想定して
これを開始の00:15から03:00までの間ループさせたいんだけど
時間と分を別々に分けて15分ずつ足して行く方法しかないですかね?
279:デフォルトの名無しさん
10/05/14 08:22:28
>>278
そうじゃないの
つまり0時1時2時3時のステップと15分30分45分00分のステップを入れ子でループするんでしょ
280:デフォルトの名無しさん
10/05/14 08:25:59
>>278ですけども
分けて計算すると変数多くなってしまうと思っての質問だったのですが
分けて計算するとしたら、どういう感じのループ条件式になりますでしょうか。
重ね重ねすいません。
281:デフォルトの名無しさん
10/05/14 08:27:43
>>279
おおお!!納得です。
ちょっと考えてきます、ありがとございました!
282:デフォルトの名無しさん
10/05/14 12:11:45
エンバグの元なのに
283:デフォルトの名無しさん
10/05/14 12:40:02
配列のデータで一意のデータを出力させたいのですが、
以下の配列データが複数あるとします。
A(0) = 1
A(0) = 2
A(0) = 3
A(0) = 4
A(0) = 3
A(0) = 3
A(0) = 10
A(0) = 2
出力結果は
A(0) = 1
A(0) = 2
A(0) = 3
A(0) = 4
A(0) = 10
こんな感じにしたいのですが、どんな感じにすればいいでしょうか
284:デフォルトの名無しさん
10/05/14 12:42:08
>>283
配列の全要素は0ではないです、すいません。
A(1) = 1
A(2) = 2
A(3) = 3
A(4) = 4
A(5) = 3
285:デフォルトの名無しさん
10/05/14 13:00:10
>>283
配列をソートして前と違うものを取り出せばよい。
あるいは最小値と最大値が極端に離れてなければBoolean型の配列を
Redim FLG(最小値 To 最大値) As Boolean
のように用意して、ループを回しながらフラッグをたて、フラッグが
立っているものを取り出してもよい。
数値にDictionaryを使うやつはアホ。
286:デフォルトの名無しさん
10/05/14 13:05:51
すまん、上はフラッグが立ってないときだけ取り出すの間違いね。
287:デフォルトの名無しさん
10/05/14 13:11:59
Dictionaryを使えばいい
288:デフォルトの名無しさん
10/05/14 13:13:21
>>285
配列のソートって出来るのですね。
フラッグはちょっと難しそうでしたので配列ソートの方を参考にさせて頂きます。
調べてる時Dictionaryというのも頻繁に出てきたのでこれも調べてみます。
レスありがとございました!
289:デフォルトの名無しさん
10/05/14 13:18:27
馬鹿の一つ覚えのDictionaryがやっぱり出てきたかw
290:デフォルトの名無しさん
10/05/14 13:25:01
Dictionaryの何がいけないか2行で説明してくれ
291:デフォルトの名無しさん
10/05/14 13:25:29
え?Dictionaryダメなの?
292:デフォルトの名無しさん
10/05/14 13:31:43
Dictionaryダメっていうやつはカルト宗教にはまりやすいタイプ
293:デフォルトの名無しさん
10/05/14 13:32:51
ダメって書くなら根拠書いて欲しい。
言いっぱなしは迷惑。
294:デフォルトの名無しさん
10/05/14 13:35:29
うるせーDictionaryっていっぱい連レスするんじゃねーよ
295:デフォルトの名無しさん
10/05/14 13:37:59
>>290
二行も必要ないなw
アホだからだよ。
無理やり二行で書くと
何で単純な整数にハッシュが必要なんだってことだな。
ハッシュなんて文字列に使うものだぞ。
296:デフォルトの名無しさん
10/05/14 13:48:13
そもそもDictionaryがどういう実装しているか知らないが、
(少なくともCollectionよりは効率がいいはずだが)
整数値は整数値をそのままハッシュ値にすればいいでしょ。
ていうか、そんなんでDictionary否定してたの?
297:デフォルトの名無しさん
10/05/14 13:56:03
ダミだこりゃ。
お手上げだね。
298:デフォルトの名無しさん
10/05/14 14:05:17
なるばくDictionaryを多く使ったほうがいいよ
299:デフォルトの名無しさん
10/05/14 14:08:51
何にでもDictionaryの人って大和の吊るし柿みたいに味のあるコードを書く人多いよね。
300:デフォルトの名無しさん
10/05/14 14:19:11
正直Dictionary回避してまで手に入れたいものって何?
301:デフォルトの名無しさん
10/05/14 14:26:17
インタプリタでソートしたりなんかしたりして遅くなるより
ネイティブなDictionaryでやったほうがいいね
302:デフォルトの名無しさん
10/05/14 14:35:57
ほんとアホばっかだなw
>>299
そういう皮肉は今の人には通じないって。
303:デフォルトの名無しさん
10/05/14 14:48:09
場合によって使い分けるのが一番
304:デフォルトの名無しさん
10/05/14 14:58:02
VBA関係ないし
305:デフォルトの名無しさん
10/05/14 16:11:00
Rangeオブジェクトについてなんですけども、
複数モジュールがある中で共有して扱わないとエラー出てしまったので
subとかが書かれてるよりも一番上(グローバル宣言?)にしたらエラーが出ませんでした。
これって外道ですかね?
306:デフォルトの名無しさん
10/05/14 16:16:12
何の話ざんしょ。もっとわかりやすくしてね。
307:デフォルトの名無しさん
10/05/14 16:35:00
Rangeオブジェクトの変数についてですけども、Moduleが1〜3あったとします。
Module1
Module2
dim aaRange as Range
call ユーザ定義関数(aaRange)
Module3
ユーザ定義関数(aaRange)記載
上記のようにModule2でRangeオブジェクトを宣言し、ユーザ定義の引数で貰ってるとします。
頻繁にユーザ定義関数を実行するのですが、aaRangeの値を常に保持していたくてグローバル宣言(呼び方あってるのかな)
してしまったと言う訳ですが!!!
糞設計でしょうか!!
308:デフォルトの名無しさん
10/05/14 16:37:23
うんkです
309:デフォルトの名無しさん
10/05/14 16:45:36
デナオシテキマス
310:デフォルトの名無しさん
10/05/15 14:27:47
16進数苦手。
イミディエイトウィンドウで
?hex(50000)
だと
C350
と出ます。
でも
?&hC350
だと
-15536
と出ます。
何で??
50000に戻したいのに・・・。
因みに
?-15536=50000
False
?hex(-15536)=hex(50000)
True
と出ます・・・。
311:デフォルトの名無しさん
10/05/15 15:50:46
>>310
50000はIntegerの範囲に収まってないのにIntegerに変換しようとしてそうなる
?&hc350& でLongに変換すればちゃんと50000になる
最後の&はLongを表す文字な
312:デフォルトの名無しさん
10/05/17 08:04:24
エクセルVBA開発のコーディングルール作ってるんだけど、意見聞かせて欲しい
ちなみに、会社で後任に引き継ぐのを想定してるだけなんで、ガチガチにする必要なし
みなさん設計する時どんなことに気をつけてます?
313:デフォルトの名無しさん
10/05/17 09:18:42
元々緩やかな下降線にはあったけど、人が減った事によって
それまでは人混みに隠れていた工作員の存在が目立つようになったのが致命傷だったな
工作員の誘導を嫌って参加者が減り、他所からの工作員を排除しようとして規制をするから
参加機会が奪われて更に参加者が減るという負のスパイラルにおちいってる
314:デフォルトの名無しさん
10/05/17 09:32:43
>>312
関数の引数は基本的にByValにするとかかな。
速度的にはByRefが望ましいんだけど。(特に文字列)
Option Explicit強制とか、
空文字の代わりにvbNull使うとか、
$バージョン関数があるなら$バージョン関数使うとか、
改行文字の種類も揃えたほうがいいかも。
変数名のつけ方をシステムハンガリアンにするなら
統一したほうがいいね。
315:デフォルトの名無しさん
10/05/17 12:41:57
Option Explicit以外、何一つ共感できない
316:デフォルトの名無しさん
10/05/17 12:45:34
>>315
俺もそう思った
317:デフォルトの名無しさん
10/05/17 12:47:19
なるほど
空白よりvbNullで統一したほうがいいな
そういやOption Explibt忘れてたわ……入れとこう
命名規則はアプリケーションハンガリアンにする予定
触る人のレベルなんかわからないし、プロジェクトごとの理解をまず深めて貰わないといけない
頭文字のみ大文字、単語ごとにアンダースコア、2バイト禁止
変数・プロジェクト名が長くなるから、頭文字大文字が必須になる
自分で慣れてないから書き換える手間が半端ないっていう
318:デフォルトの名無しさん
10/05/17 13:32:40
・VBA禁止
319:314
10/05/17 13:35:57
>>315-316
共感するしないじゃなくて、具体的な案とか意見書いてくれ。
問題点があるならそれもよろしく。
320:デフォルトの名無しさん
10/05/17 13:36:32
なぜそこまでしないといけないんだ
321:デフォルトの名無しさん
10/05/17 13:37:57
共感できないというなら理由ぐらい示せってだけだよ。
322:デフォルトの名無しさん
10/05/17 13:43:49
めんどくさい
323:デフォルトの名無しさん
10/05/17 13:46:18
役に立たないなあ…
324:デフォルトの名無しさん
10/05/17 13:51:31
別に役に立ちたくないし
325:デフォルトの名無しさん
10/05/17 14:00:39
>>315
俺もそう思った
326:デフォルトの名無しさん
10/05/17 15:47:24
>>315
私もそう思うわ
327:デフォルトの名無しさん
10/05/17 18:47:47
共感とか意見とか議論とか以前にルールに作るのになんかない? って質問に答えてるのが>>314だけじゃねえか
人のレスにいちゃもんつけるくらいしか出来ねえのか三流プログラマども
俺も>>315には共感するけどそれはそれとして
328:デフォルトの名無しさん
10/05/17 20:03:33
関数の前には必ず説明のコメントを書く。書式も統一して、検索しやすいようにする
何より
手段と目的が逆転しないように気をつける
329:デフォルトの名無しさん
10/05/17 20:18:20
変数名は大文字で始める?小文字で始める?
システムハンガリアンとかいうのは小文字だよね?
330:デフォルトの名無しさん
10/05/17 21:42:31
Dim hoge$ と書くか Dim hoge As Stringと書くか
331:デフォルトの名無しさん
10/05/17 22:47:17
普通は小文字で
332:デフォルトの名無しさん
10/05/17 23:08:56
大文字にしておくと、小文字で打ったときに自動訂正してくれる
だから大文字含めた変数名にしておくと、タイプミスが少なくなる
333:デフォルトの名無しさん
10/05/17 23:43:45
小文字の変数名にすると、ある型の名前を変数名にしてしまったときに
型が勝手に小文字になって困ってしまう
例えば、rangeとかdateとかを変数名にすると、全体的に型のRangeが
勝手にrangeに変わってしまう
なんとかならないんだろうか
334:デフォルトの名無しさん
10/05/18 00:04:23
VBAはシンボルを大文字小文字で区別しないんだから気にしなけりゃいいんじゃね
あとはかぶらない名前にするか
335:デフォルトの名無しさん
10/05/18 05:45:44
>>332
Option Explicitとか宣言の強制使え
>>333
システムで宣言済みの名前を使うな
336:デフォルトの名無しさん
10/05/18 07:56:22
予約後を変数で使おうとする気持ちがよくわからない。
337:デフォルトの名無しさん
10/05/18 08:04:48
特定の型の名前を予約語とは言わない。
338:デフォルトの名無しさん
10/05/18 08:26:09
特定の型の名前を(ry
339:デフォルトの名無しさん
10/05/18 08:41:53
Javaの場合なんだが、Eclipseとかの代表的なIDEは、変数の名前補完のデフォルトが
クラスの小文字名だよ
340:デフォルトの名無しさん
10/05/18 12:23:32
その人の行動は「プライバシー問題に関して無頓着」で一貫しているように
見えるので理解してもらうのは難しいと思う。新しい概念を習得してもらうには
少々歳を取りすぎている。掲示板にもらった手紙の全文を掲載した時点で
気が付くべきだったのかも。
「プライバシー問題に関して無頓着」な人は親しくない相手にも平気で年齢や
職業を尋ねる傾向があるようなので注意したほうがいいです。
341:デフォルトの名無しさん
10/05/18 12:24:23
>>335
デバッグするまでスペルミスのリスク抱えてろってのか?
タイプミスじゃなくて思い違いだったりすると、毎回変数名間違うことになる
一ヵ所ならまだしもデバッグ時に複数箇所とか煩わしすぎ
頻度の少ないコードとか気付かなかったり、確実にデバッグ出来るってわけでもないし……
342:デフォルトの名無しさん
10/05/18 13:47:54
日本語最強。
Dim 氏名 As String
343:デフォルトの名無しさん
10/05/18 15:21:21
2バイト表記はエラー起こす処理がMS公式であったはず
なんだか忘れたが、2バイト名関数を呼び出した時いらない参照呼び出して不具合引き起こしてたような
対応する気ない見たいだから、でっかいシステム組むのにはエラーでる覚悟はしとくべき
344:315
10/05/18 16:38:12
・関数の引数をByValにするのかByRefにするのかは、関数の仕様による。どちらかに決めうち
するような性質のものではない。
・空文字列とvbNullは同じものではない。VarType()してみればわかる。
・いちいち$バージョンの関数があるかどうか調べるのはめんどくさいので使わない。
そもそもmid()とmid$()とかは別物なのか?とかいうのも調べるのがめんどい。
・改行文字の種類も揃えたほうがいいかも <= 意味不明。vbCrLfを使いましょうってことだとしても、
別にそろえる必要性を感じない。
・システムハンガリアンは使わない。
345:315
10/05/18 16:40:05
ちなみに、俺が昔作ったVBA用コーディング規約で、
「変数の定義はできるだけ遅くやる(使用する行/ブロックの直前でやる」
と決めたら、誰一人共感してくれなくて、驚くほどの反発があったことを思い出したよw
346:デフォルトの名無しさん
10/05/18 16:49:53
コーディング規約というかコーディングガイド的なものとして、こんなの提示したことあった。
・アーリーバインドをなるべく使う
・イベントプロシージャの中に処理を直接書かない
・変数は一行一個で宣言しろ
・Publicな関数はPascalCaseで
・Const使え
こんな感じだったか。
347:デフォルトの名無しさん
10/05/18 16:51:59
あ、そうそう、俺はシステムハンガリアンも使って良い派で、使うならfrmとかを決めてた気がする。
348:デフォルトの名無しさん
10/05/18 19:47:42
文字列をByValで渡した時って、先頭のポインタが値渡しされるの?
それとも、文字列全体がまるまるコピーされるの?
349:デフォルトの名無しさん
10/05/18 20:40:23
参照渡し プロシジャに値を渡す時、値そのものではなく、値が格納されている
変数のアドレスを渡す
呼び出し先のプロシジャで引数として宣言している変数の値を変更する
と、その引数に指定している呼び出し元の変数の値も変更される
値渡し プロシジャに値を渡す時、値そのものをコピーして渡す。
呼び出し先のプロシジャは、渡された値のコピーを受け取るだけなので
呼び出し先のプロシジャで引数として宣言している変数の値を変更して
も、呼び出し元の変数は一切影響を受けない。
だったかと
350:デフォルトの名無しさん
10/05/18 21:15:22
>>349
で、ポインタの値渡しなの?中身の値渡しなの?
351:デフォルトの名無しさん
10/05/18 21:18:55
>>350
コピーされる。
ちなみにVBの文字列の型はBSTR。
先頭に文字列長、末尾にヌル文字のUTF16文字列だったかな。
352:デフォルトの名無しさん
10/05/18 21:27:09
手元の本によると
プロシージャの引数の文字列がコピーされるのは以下のタイミング。
・ByRefだと文字列定数を渡した時
・ByValだと常時
もちろんポインタのコピーじゃなくて文字列をフルコピー。
VBの文字列はImmutableじゃない。
353:デフォルトの名無しさん
10/05/18 21:52:10
>>351-352
ありがとうございます。
VBAについてそこまで深く書いてある本もあるんですね
354:デフォルトの名無しさん
10/05/18 22:27:49
>>344
・引数にByRef|ByValを指定しなければByRefになる。
アホが引数を書き換えるとわかりづらいバグに発展する。
普通の関数であれば値渡しでいいはず。参照渡しを積極的に使う場面は少ない。
・ごめん。vbNullじゃなくてvbNullString。
・$・非$関数は別物。$じゃなければVariantが帰ってきている。
普通はVariantには用がないはず。作者も$の方使えって言ってる。
・それならばvbCrLfとvbNewLineどちらを使うのか。
・システムハンガリアンはどうでもいいや。
355:デフォルトの名無しさん
10/05/18 22:35:57
作者って誰だよ
VBの作者か?
356:デフォルトの名無しさん
10/05/18 22:44:19
厳密にいうとVBにIntelliSenceつけたチームの中の人だな。
357:デフォルトの名無しさん
10/05/18 23:13:14
VBEの自動構文チェックって邪魔にしか思えないんだが、あれが便利で使ってるって人いる?
なんであんなものがあるのか不思議でしょうがない
358:デフォルトの名無しさん
10/05/18 23:21:43
どっかのペインにちょこっとアクティブに表示してくれるだけなら
便利な機能だけどダイアログで出るのが最高にウザいよなw
359:デフォルトの名無しさん
10/05/19 11:30:50
>>354
普通の関数であれば参照渡しでいいはず。
値渡しが必要な場合にのみByValを使え。
360:デフォルトの名無しさん
10/05/19 11:35:47
midとmid$のパフォーマンス気にする奴が、常にByVal使えとか笑えるわ
361:デフォルトの名無しさん
10/05/19 11:59:22
まあそれもそうだね。
ただ、両バージョン混在してるなら$にしろって言うけどね。
参照渡しは本当に理解してないのが多い(特にCとかJavaとかの人)
362:デフォルトの名無しさん
10/05/19 12:00:52
俺はかっこ悪いから$とかつけない
ByValもつけない
363:デフォルトの名無しさん
10/05/19 12:04:27
変数宣言とか関数宣言だと使うよ。
いちいちAsなんて書いてられない。
364:デフォルトの名無しさん
10/05/19 12:11:17
兎に角、統一してあればそれでいいや
365:デフォルトの名無しさん
10/05/19 12:23:27
Typename(Mid("a",1,1))ってやるとStringって言われるんだけど、
実際はVariantだってのはどこ見ればわかるのか知りたい。
366:デフォルトの名無しさん
10/05/19 12:25:02
第一引数を数値にしてみたけどやっぱり戻り値はStringだなあ
?Typename(Mid(123,1))
String
367:デフォルトの名無しさん
10/05/19 12:34:42
そもそもTypeNameってVariant自体は表示しないでしょ
368:デフォルトの名無しさん
10/05/19 12:41:11
>>364
なんかネット上に書いてありそうだけど、この本見てね。
Welcome to PowerVB
URLリンク(www.powervb.com)
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4945日前に更新/189 KB
担当:undef