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 >>256
コードをいじらないといけないじゃないか >>258
データの更新自分しか出来ないんじゃね
参照しか出来ないならwebシステムにすればいいんじゃね >参照しか出来ないならwebシステムにすればいいんじゃね
ヒント:権限 >>253
> ずっと使い続けてメンテも必要なVBAでセルにアクセスするなら名前経由でやってます?
状況次第だけどよくアクセスするとか重要なセルは適当なところでまとめて変数に代入してる
Dim hoge As Range
Set hoge = Range("A1")
...
hoge.value = "うんこ"
> 行挿入とかに追従してくれる名前の方を使うべきかなぁとか思ったり…
行とか列の挿入を想定するなら名前をつけてそれで参照する
ユーザーが作成するようなシートなら特定の文字列を検索して場所を特定するとかもやる >>264
自分に権限がないなら権限を持ってる人に許可貰えばいいだけじゃね?
なんの権限か不明だが >>258
批難がでるって事は不便な点とかがあるって事で
仮にそれが商品だとしたら売れない可能性があるってこと
競争相手がいたら使われなくなる商品 >>267
売れてるiPhoneのスレでも見てこいよ
売れない/使われないものをいちいち非難するほど人は暇じゃない >>268
売れないなら批難は出ないと言う主張なら
批難轟々なら売れるって事だよな
じゃ売ってみればいいんじゃね? >>268
それは代替品がある場合だ
その代替品に乗り換えれば済むから
社内とかの代替品がなければ嫌々でもそれを使うしかない >>269-270
レスを分けて書く奴はもれなくバカの法則 w >>271
それ面白いか?
別に面白くないけどなぁ VBAのマクロって
・マクロ制作者本人の操作を補助する為のものであり、他人に使わせる事は想定されていない
・オフィス製品の操作を補助する為のものであり、アプリケーションの本来の振る舞いを超えた動作は想定されていない
・ユーザーフォームはマクロの操作を容易にする為のものであり、別のアプリケーションであるかの様に振る舞う事は想定されていない
なので想定されていないものを作ろうとしたら不便さを感じるのは当然
どんな言語もそうだけど、想定された使い方なら便利だし、そうでないなら不便だよ >>255
なるほど
例えば
○年○月 の○のセルを指定する際に
「年」のセルを探してOffset(0,-1)する、みたいな感じですかね
自分はこれも名前つけて管理してましたが
セルが1つの場合はそれで良さそうですね
ただ、全く同じ内容のセルが検索範囲にないことが保証された運用にしないとバグりそうなのでちょっと怖いかも
>>256
表に対してレコードセットみたいなアクセスをしたい場合に
つい最近その方法を知って目からウロコでした
とにかくインテリセンスを効かせたい派なので・・
http://thom.hateblo.jp/entry/2015/12/17/000132
こういうことですよね
行方向に関しては、列のように各行に別々の意味を持たせるような使い方はしたことないので
問題ありませんね
>>261
自分は簡単なSQLを作る(ANDとかORで結合するだけ)に特化したStringBuilderみたいなのだけ使ってますね
>>265
やっぱ可変範囲のこと考えると名前つけるのは意味ありますよね >>273
>他人に使わせる事は想定されていない
これは本当に思いますね
Accessなんかはフォームでの入出力が基本だし
各データの型も指定するから
出来ること出来ないことを設計者が細かく指定しやすいですが
Excelは書式や入力データを限定させようとすると
そのノウハウの習得のことも考えたら相当な時間がかかる気が…
以前「値のみの切り取り・コピーしかできない」ようにしようとして
えらい苦労しました 所詮道具 しかし便利な道具 それをよりによってなんで使い辛くするのか 神経を疑うわ
改変、改ざん、変更がダメならそっちに注力すべきだろ
バックアップなりPDF出力なり変更者・変更ヶ所の記録なりなんなり
余計な仕事して会社の利益を浪費すんなよ Excel VBA一本で家族養って食っていけてる人いる? >>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になる条件だけ書いていけばいい。 ■ このスレッドは過去ログ倉庫に格納されています