Excel VBA 質問スレ Part49©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part48
http://mevius.2ch.net/test/read.cgi/tech/1494890685/
※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured >>277
vbaしか扱わない仕事なんて無いよ
必ず何かのついで
vbaあると事務作業の確実性は上がるけどね >>279
プログラマー志望でvbaの仕事しかやったことないんだが。 >>280
クルマで言えば「1車種しか運転できない」のと同じ
プログラマになろうなど論外 >>281
別の言語の方が得意なんですけどね。。
他言語のキャリアないから呼ばれない。 >>277
半年ぐらいならあるよ
社内システムの一部を担当しててVBAだけずっとやってた
もちろんそれに付随する仕様書とかマニュアル作りとかも含むけど 自分は業界デビューがAccessVBAで、そのうちC/C++もやるようになった。
で、今PHPとかJavaとか知らなくて仕事減ってきてる。 PHPは言語は楽ちんだけどネットワーク周りがキツイ
専サバならどうでもいいけどレンタルサーバーだと制限多くて何もできん VBA4とかの時代はなぜかユーザー定義型のリファレンスをクラスモジュールに渡せなくて悩んだ覚えがあるけど最近は大丈夫なのねと >>287
うん。
50万ぐらいのレコードを扱う、MySqlをバックエンドとしたC/S型のシステム作ったよ。
vbaは例外ハンドラが弱すぎて、自作スタックトレースみたいな仕組みを作ったりとか、バージョン管理大変だし、vbaでシステム開発は怖すぎてやりたくないっす。
初速はいいけど、規模が大きくなってくると生産性が著しく落ちるねー。 >>289
クレイジーだな
VBAでやるの間違ってね >>290
バックエンドがMySQLなら50万レコード程度は楽勝だろうしフロントエンドにExcel VBAはたいして珍しくないぞ そもそも、VBA使いってエンジニアじゃないよね。
なので、エンジニア目線での会話はしないほうがいいよ。 方言で喋るヤツは日本人じゃないよねみたいな言い回しは嫌い エンジニア畑の出身ではないということ。
エンジニア畑を歩いてきた人はVBAなんかには染まらないよ。 じゃあ東京出身以外は日本人じゃないんだね
哀れな見識の狭さだな 東京出身で大阪に住んでる人は関西人じゃないし、大阪出身で東京に住んでる人は江戸っ子ではない。 他の言語をバリバリ使うエンジニアがVBA使うなんていくらでもあるだろ 馬鹿の一つ覚えみたいに、なんでもかんでも変数に入れちゃうし、しかもいまだにハンガリアン記法だったりする。
エラー対策もバッチリですと言わんばかりにエラー処理が延々と続くコードを晒す。
ただでさえ冗長な言語なのに輪をかけて冗長なコードを書く。
誰もお前のコードなんかコピペしねーからコアな部分だけを簡潔にかけ、と言いたくなる。
VBAが書けるぐらいでエンジニアづらするな。 >>302
あれ?
VBA使いはエンジニアじゃないんじゃなかったっけ >>305
つまみ食いするエンジニアはいるでしょ。 お前の中ではVBAからプログラムに入り今は別言語メインってやつは存在しないんだね エンジニアかどうかってプログラム言語に依存する概念だっけ?
実現手段なんかコロコロ変わるのに vbaからhtml・phpに行ってなんか社内SEみたいなことやってるわ
割りと楽 >>307
うん、縛り。
>>308
多くのエンジニアの中で揉まれた経験があるかどうか、だよね。
>>310
ありがちだよね。「みたいなこと」止まり。
いわゆる「エンジニアもどき」ってやつw >>311
揉まれた経験からだと言う割にメイン言語で縛ってたりVBA出身は違うとか言ったり
主張は明確に頼む ExcelVBAの挙動が謎すぎて困る
IF xx IS NOT NULL AND xx.value = 100
みたいので例外出たときは目を疑った
nullのときも両辺評価するって決まってるならまだしも
普段は何事もなく動いてるのに
急に気まぐれに両方評価するのやめーや… >>313
君こそ何が言いたいのかよくわからないけど、
まぁ、コードは簡潔に、ということ。 >>315
俺の言いたいことは「方言で喋るヤツは日本人じゃないよねみたいな言い回しは嫌い」ってだけ
コードは簡潔にって所は同意見だな >>314
今更だろう
longな数値同士を文字列結合できるぐらいなんだし、何が起こっても驚かん
Sub foo()
Dim a As Long
Dim b As Long
a = 1
b = 2
Debug.Print a & "|" & b
End Sub ってかvbaって実は内部的に全部variantで処理してない?と思うことがたまによくある >>314
短絡評価が保証されてない言語で
> IF xx IS NOT NULL AND xx.value = 100
なんて書く奴の方が謎
NothingじゃなくてNULLなのも謎
あとNULLならIsNull( )じゃないのも謎 知らんがな!そんな詳しくない
環境制限されて使わざるをえずに使って
ちょっとカルチャーショック受けただけ まえ2chでEXCELVBAが挙動アバウトだから使いたくないって言ったら
お前の頭がアバウトなだけでVBAはアバウトじゃないって返された
ほんとにアバウトやん いつもながらの仲間内のどうでもいい戯言が続いているだけなんで、質問者の方は気になさらずにどうぞ〜 >>314
>「nullのときも」
Nullかどうか関係なく AND 演算子がつねに両辺評価だってだけよ >>320
ところでちょっと興味あるんだけど「環境制限」て何がNGなの? うんそれならまだわかる、たぶんそんな気がしてきた
Nullのとき正常終了してるケースがあるように見えたんだ
たぶん見間違いだ まあ、VBAが言語としてクソなのは認めざるを得ないよな
最近javascriptつまみ食いしてるけど、これはこれで魔境とは言え進化してるしさ、常に >>319
短絡評価が保証されてないというか無いものだと思ってたけど、短絡評価される状況ってあるの?
あるなら活用したいもんだけど。 nullの話出たから聞きたいんだけどnullとかnothingの判定を完結にやるいい方法ってないの?
やりたいのはnull,vbnull,nothing,emptyなどなど値が入ってない状態を検知したい
全部if elseifでやるのは汚すぎるからあまりやりたくない If文を可能な限り避けるとなると
Function foo(hoge) As Boolean
Select Case VarType(hoge)
Case 0,1
...
Case 9
If hoge Is Nothing Then
End Select
End Function
みたいな書き方かな データの値の状態を判定するならif elseif よりも
Select Case Expressionの方が無駄なく綺麗に書ける >>329
保証されてない ≒ 動作する場合があるかも知れないけど面倒だしどうでもいいから調べてない >>337
なるほど。
null判定は自分で関数作っちゃうのが早いよってことね。 こんな感じかな。
Function IsNone(hoge) as Boolean
Select case True
Case IsNull(hoge)
IsNone = True
Case IsEmpty(hoge)
IsNone = True
Case hoge is Nothing
IsNone = True
Case hoge = ""
IsNone = True
Case hoge = vbnullstring
IsNone = True
Case Else
IsNone = False
End Select
End Function なんでこんな初心者用のスレでVBAはゴミだのカスだのドヤ顔でほざいてるの?
どうせ普段は別の言語で仕事してる奴が、ちょっと頼まれたVBAが解らなくてファビョってるんだろ?w >>341
その状況なら確かに愚痴りたくなるだろうね どうせ自称VBAに詳しいクズと自称メインは他言語のクズしかいないんだから仲良くしろよ >>341
他の言語出来るやつなら自分で調べられるし聞き方も賢くできると思うぞ >>341
vbaで仕事は暇になるも、ひたすらすることがない。
コミュニケーション能力のほうが大事と気づくのに、そう時間はかからなかった
コミュ力も高まる言語、それがvba >>340
横からですが、借りてってもいいですか? >>348
もちろん自由に使えばいいけど、スマホで書いてるのでPCテストしてない。自己責任でよろしく。
読み返したら、Is Nothing のところは明らかにエラーになると思うので、こんな感じのほうがいいかも。(PCテストしてないので自信はない。あしからず)
Function IsNone(hoge) as Boolean
If IsObject(hoge) Then
If hoge Is Nothing Then IsNone = True
End If
Select case True
Case IsNull(hoge)
IsNone = True
Case IsEmpty(hoge)
IsNone = True
Case hoge = ""
IsNone = True
Case hoge = vbnullstring
IsNone = True
Case Else
IsNone = False
End Select
End Function
なんか美しくないね。
ま、好きなように書き換えて。 >>349
ありがとうございます。
エラーの度に色々悩んでたもので。
この辺を美しく書けるのが理想ですが、なかなか難しい。 僕は唱える 魔法の言葉 on error resume next
みんなで歌おう 魔法の言葉 on error resume next >>349
objectを掴めてないときのemptyとか、開放できないときのオートメーションエラーとかに悩まされて、ある程度解決してたんですが、これで最終解脱できそうな予感。
ありがたや。 ExcelからOutlookを起動し、予定表から会議依頼を作成するマクロを作成しています
あらかた思っていたものは作れたのですが、自分の予定表ではなく共有の予定表に保存する場合のコードがさっぱり分かりません
共有の予定表での作成方法をご教示頂けますでしょうか >>349
IsObject(Expression)の判定をしてるIfブロックの終了間際にExit Function入れないとダメなんじゃね? >>354
おっしゃるとおり。
あるいは、Select以下をElseでつなげるか。
でも美しくないので書き換えてみた。
結構いいんじゃね?(軽くテスト済み)
結局、>>333 が最適解だったわけね。
なかなかの実力者とみた。
Function IsNone(hoge) As Boolean
Select Case VarType(hoge)
Case vbEmpty, vbNull
IsNone = True
Case vbObject
If hoge Is Nothing Then IsNone = True
Case vbString
If hoge = vbNullString Or hoge = "" Then IsNone = True
Case Else
IsNone = False
End Select
End Function >>355
isNoneが未定になるパスがあるんじゃね 値とかオブジェクトが普通に入っている場合がすっぽり抜けてるんですがそれは >>355
Sub buf()
On Error Resume Next
For i = 1 to n
Set MyObj = SPAM
If Err then
If not IsNone(SPAM) then Brake
Else
Goto Continue
End if
Else
ここで処理。
Continue:
Err.clear
Set MyObj = Nothing
End if
Next
End sub
みたいな使い方を考えたんですが、全然美しくない・・・
どうすれば良いでしょうか。 >>357
IsNoneの初期値をFalseにすればいいんじゃね? As Booleanで指定した場合はデフォルトがFalseだからTrueになる条件だけ書いていけばいい。 ああなるほど、初期化って頭が全くなかった。サンクスです。 >>359
Case vbarray を加えればいいだけじゃね?
…って思ったら、配列の空判定は結構やっかいかも。
配列判定いる? どういうものを実装するかにもよるけど経験から言うと配列の判定は別の方がいい。
アプローチの仕方が違うから、変数単体で認識させていたものを配列突っ込める様にした時なんかにバグの温床になる。 >>364
もちろん目的によるけどね。
個人的には空の文字列は正常側だと思うし variant型は脊髄反射で否定するくせにvariantみたいなヤリマン関数が大好きなお前らってw variantのみを使うor絶対variantは使わない
みたいな論争は見たこと無いな 前スレかその前かの最後の方でVariant型絶対使わないマン出てきていた様な気がするけど。
そういう信条自体は別に良いんだけど、Variant型使えば解決出来る事を信条のせいで解決出来ず、
その結果として「VBAは欠陥」って言い出す変な人はこのスレでよく見かける。 便利な道具を使いこなせないドンくさい奴ってことだよ すいません、353ですが自決しましたのでスルーで結構です
コピペだけでなく内容も理解できるようもっと勉強します >>364-365
配列は要素数の空判定でお茶を濁そう。
これ以上のブラッシュアップは断念。
コードとしてはそこそこ美しいと思う。
Function IsNone(hoge) As Boolean
Select Case VarType(hoge)
Case vbEmpty
IsNone = True
Case vbNull
IsNone = True
Case vbObject
If hoge Is Nothing Then IsNone = True
Case vbString
If hoge = vbNullString Or hoge = "" Then IsNone = True
Case vbArray + vbVariant
If Ubound(hoge) = -1 Then IsNone = False
End Select
End Function 訂正。最後、Trueだった。。(^_^;)
Function IsNone(hoge) As Boolean
Select Case VarType(hoge)
Case vbEmpty
IsNone = True
Case vbNull
IsNone = True
Case vbObject
If hoge Is Nothing Then IsNone = True
Case vbString
If hoge = vbNullString Or hoge = "" Then IsNone = True
Case vbArray + vbVariant
If Ubound(hoge) = -1 Then IsNone = True
End Select
End Function >>373
Function IsNone(hoge) As Boolean
Select Case VarType(hoge)
Case vbEmpty,vbNull
IsNone = True
Case vbObject
If hoge Is Nothing Then IsNone = True
Case vbString
If Len(Trim(hoge)) = 0 Then IsNone = True
Case Is >= vbArray
IsNone = True
End Select
End Function
ArrayはVariant型以外の場合もあるから、この方がいい。 >>375
おおー、まだブラッシュアップできたか。
素晴らしい。
それなりに使える関数になったかもね。 ■ このスレッドは過去ログ倉庫に格納されています