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 Range("250").ClearContents !!!? その手があったか!! 今まで、真面目に名前を付けることしか考えなかったわ。 Dim Sh As Worksheet Set Sh = Thisworkbook.Worksheets("(´・ω・`)b") こんなのもありだな。 そういやみなさん その場限りの適当マクロじゃなくて ずっと使い続けてメンテも必要なVBAでセルにアクセスするなら名前経由でやってます? 自分はまずセルに名前をつけて Const hoge = "セルにつけた名前" Range(hoge).value = "うんこ" みたいなことやってます ちなみに、シート名でもこれやってるんですが‥ シート名やセル名が変わる可能性を前提にしたら こういうアプローチになるとは思うんですけど 結局凄く無駄なことをやってる気がして…(結局変えることあんまないし) 特にセルの名前に関しては、どうせその文字列をConstのところにハードコードするなら 名前つけずに Const hoge ="A1:B5" でもええやんけとか思ってるんですが 行挿入とかに追従してくれる名前の方を使うべきかなぁとか思ったり… >>253 セルに文字列で意味をつけて その文字列を検索して特定する そのセルからのオフセットを固定しておく 例えば列名とか行名とか >>253 よくある表の列の増減対応する場合は 列挙体で列名を定義しておいて Cellsで列名を参照させてる。 途中にぶっこんでも列挙体のほうをちょろっと書き換えればいい。 行にも対応させると、面倒かも。 >列の増減 会社のやつ、一切弄れないようにしたわwwwww セルを保護するとかじゃなくて、 データの更新時に、全消しして再描画するのwwwwwwwwww 列挿入とかしても無駄ですよってwwwwwww そういうの、このスレだと基本だと思う ・正規化したデータを引っ張ってくる ・ボタン押したらvbaで構築。シートすら削除して再作成 こんなんばっかだろ。誰もさわれなくて非難轟々だけど、どうかんがえてもこっちのほうが安全なんだよな >>253 普通にやってるしシート名とかも定義する あとは汎用的なクラスや関数いくつも作っておいて雛形エクセルにしてる >>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 ありがとうございます。 エラーの度に色々悩んでたもので。 この辺を美しく書けるのが理想ですが、なかなか難しい。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる