X



Excel VBA 質問スレ Part49©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ bb2e-8SzA)
垢版 |
2017/06/26(月) 02:15:14.60ID:T3ylemnb0
!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
0262デフォルトの名無しさん (ワッチョイ f191-+gV6)
垢版 |
2017/07/15(土) 04:37:45.96ID:7LAckzVN0
>>256
コードをいじらないといけないじゃないか
0263デフォルトの名無しさん (ワッチョイ f191-+gV6)
垢版 |
2017/07/15(土) 04:53:42.10ID:7LAckzVN0
>>258
データの更新自分しか出来ないんじゃね

参照しか出来ないならwebシステムにすればいいんじゃね
0265デフォルトの名無しさん (ワッチョイ aa11-OTuW)
垢版 |
2017/07/15(土) 09:43:36.21ID:jhhap/jh0
>>253
> ずっと使い続けてメンテも必要なVBAでセルにアクセスするなら名前経由でやってます?
状況次第だけどよくアクセスするとか重要なセルは適当なところでまとめて変数に代入してる
Dim hoge As Range
Set hoge = Range("A1")
...
hoge.value = "うんこ"

> 行挿入とかに追従してくれる名前の方を使うべきかなぁとか思ったり…
行とか列の挿入を想定するなら名前をつけてそれで参照する
ユーザーが作成するようなシートなら特定の文字列を検索して場所を特定するとかもやる
0266デフォルトの名無しさん (ワッチョイ f191-+gV6)
垢版 |
2017/07/15(土) 09:44:21.75ID:7LAckzVN0
>>264
自分に権限がないなら権限を持ってる人に許可貰えばいいだけじゃね?

なんの権限か不明だが
0267デフォルトの名無しさん (ワッチョイ f191-+gV6)
垢版 |
2017/07/15(土) 10:08:30.41ID:7LAckzVN0
>>258
批難がでるって事は不便な点とかがあるって事で
仮にそれが商品だとしたら売れない可能性があるってこと

競争相手がいたら使われなくなる商品
0269デフォルトの名無しさん (ササクッテロラ Sp72-+gV6)
垢版 |
2017/07/15(土) 11:48:46.46ID:CRqbHh/Cp
>>268
売れないなら批難は出ないと言う主張なら
批難轟々なら売れるって事だよな

じゃ売ってみればいいんじゃね?
0270デフォルトの名無しさん (ササクッテロラ Sp72-+gV6)
垢版 |
2017/07/15(土) 11:50:44.37ID:CRqbHh/Cp
>>268
それは代替品がある場合だ
その代替品に乗り換えれば済むから

社内とかの代替品がなければ嫌々でもそれを使うしかない
0273デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
垢版 |
2017/07/15(土) 17:34:03.53ID:0urlci1o0
VBAのマクロって

・マクロ制作者本人の操作を補助する為のものであり、他人に使わせる事は想定されていない
・オフィス製品の操作を補助する為のものであり、アプリケーションの本来の振る舞いを超えた動作は想定されていない
・ユーザーフォームはマクロの操作を容易にする為のものであり、別のアプリケーションであるかの様に振る舞う事は想定されていない

なので想定されていないものを作ろうとしたら不便さを感じるのは当然
どんな言語もそうだけど、想定された使い方なら便利だし、そうでないなら不便だよ
0274デフォルトの名無しさん (ワッチョイ c491-BaGs)
垢版 |
2017/07/15(土) 17:40:17.34ID:Id32lc0P0
>>255
なるほど
例えば
○年○月 の○のセルを指定する際に
「年」のセルを探してOffset(0,-1)する、みたいな感じですかね
自分はこれも名前つけて管理してましたが
セルが1つの場合はそれで良さそうですね
ただ、全く同じ内容のセルが検索範囲にないことが保証された運用にしないとバグりそうなのでちょっと怖いかも


>>256
表に対してレコードセットみたいなアクセスをしたい場合に
つい最近その方法を知って目からウロコでした
とにかくインテリセンスを効かせたい派なので・・
http://thom.hateblo.jp/entry/2015/12/17/000132
こういうことですよね

行方向に関しては、列のように各行に別々の意味を持たせるような使い方はしたことないので
問題ありませんね

>>261
自分は簡単なSQLを作る(ANDとかORで結合するだけ)に特化したStringBuilderみたいなのだけ使ってますね

>>265
やっぱ可変範囲のこと考えると名前つけるのは意味ありますよね
0275デフォルトの名無しさん (ワッチョイ c491-BaGs)
垢版 |
2017/07/15(土) 17:47:17.89ID:Id32lc0P0
>>273
>他人に使わせる事は想定されていない
これは本当に思いますね
Accessなんかはフォームでの入出力が基本だし
各データの型も指定するから
出来ること出来ないことを設計者が細かく指定しやすいですが
Excelは書式や入力データを限定させようとすると
そのノウハウの習得のことも考えたら相当な時間がかかる気が…

以前「値のみの切り取り・コピーしかできない」ようにしようとして
えらい苦労しました
0276デフォルトの名無しさん (ワッチョイ 926f-MRQN)
垢版 |
2017/07/15(土) 20:37:21.43ID:VxLYhzBT0
所詮道具 しかし便利な道具 それをよりによってなんで使い辛くするのか 神経を疑うわ
改変、改ざん、変更がダメならそっちに注力すべきだろ
バックアップなりPDF出力なり変更者・変更ヶ所の記録なりなんなり
余計な仕事して会社の利益を浪費すんなよ
0277デフォルトの名無しさん (アウアウウー Sa08-6eVw)
垢版 |
2017/07/15(土) 20:57:08.80ID:4AnbxIb9a
Excel VBA一本で家族養って食っていけてる人いる?
0289デフォルトの名無しさん (ドコグロ MM02-KaH7)
垢版 |
2017/07/16(日) 19:14:48.07ID:zK8m4MiwM
>>287
うん。
50万ぐらいのレコードを扱う、MySqlをバックエンドとしたC/S型のシステム作ったよ。

vbaは例外ハンドラが弱すぎて、自作スタックトレースみたいな仕組みを作ったりとか、バージョン管理大変だし、vbaでシステム開発は怖すぎてやりたくないっす。

初速はいいけど、規模が大きくなってくると生産性が著しく落ちるねー。
0293デフォルトの名無しさん (オッペケ Srd7-OYLW)
垢版 |
2017/07/17(月) 18:01:49.57ID:eqSf35i7r
はぁ?
0301デフォルトの名無しさん (オッペケ Srd7-Ucbr)
垢版 |
2017/07/17(月) 20:12:26.22ID:7pjXcMGRr
馬鹿の一つ覚えみたいに、なんでもかんでも変数に入れちゃうし、しかもいまだにハンガリアン記法だったりする。
エラー対策もバッチリですと言わんばかりにエラー処理が延々と続くコードを晒す。
ただでさえ冗長な言語なのに輪をかけて冗長なコードを書く。
誰もお前のコードなんかコピペしねーからコアな部分だけを簡潔にかけ、と言いたくなる。
VBAが書けるぐらいでエンジニアづらするな。
0309デフォルトの名無しさん (ワッチョイ ef11-+gV6)
垢版 |
2017/07/17(月) 20:54:22.06ID:ZHV5JA270
エンジニアかどうかってプログラム言語に依存する概念だっけ?
実現手段なんかコロコロ変わるのに
0314デフォルトの名無しさん (ワッチョイ 5ce3-z+eH)
垢版 |
2017/07/17(月) 21:38:42.01ID:xDa7p7Qa0
ExcelVBAの挙動が謎すぎて困る
IF xx IS NOT NULL AND xx.value = 100
みたいので例外出たときは目を疑った

nullのときも両辺評価するって決まってるならまだしも
普段は何事もなく動いてるのに
急に気まぐれに両方評価するのやめーや…
0330デフォルトの名無しさん (スッップ Sd70-QKFr)
垢版 |
2017/07/18(火) 00:17:38.11ID:kpygt+jXd
nullの話出たから聞きたいんだけどnullとかnothingの判定を完結にやるいい方法ってないの?
やりたいのはnull,vbnull,nothing,emptyなどなど値が入ってない状態を検知したい

全部if elseifでやるのは汚すぎるからあまりやりたくない
0331デフォルトの名無しさん (ワッチョイ f191-+gV6)
垢版 |
2017/07/18(火) 00:18:33.82ID:sD2l3tVa0
>>330
全部調べる関数を作ればいいのでは?
0340デフォルトの名無しさん (オッペケ Srd7-Ucbr)
垢版 |
2017/07/18(火) 07:42:58.67ID:StSxL3ktr
こんな感じかな。

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
0341デフォルトの名無しさん (オイコラミネオ MMb6-hcOc)
垢版 |
2017/07/18(火) 08:48:10.34ID:XjshxdE9M
なんでこんな初心者用のスレでVBAはゴミだのカスだのドヤ顔でほざいてるの?
どうせ普段は別の言語で仕事してる奴が、ちょっと頼まれたVBAが解らなくてファビョってるんだろ?w
0345デフォルトの名無しさん (オッペケ Sr39-nv+z)
垢版 |
2017/07/18(火) 12:19:29.42ID:1XJz7Xgqr
どうせ自称VBAに詳しいクズと自称メインは他言語のクズしかいないんだから仲良くしろよ
0349デフォルトの名無しさん (オッペケ Srd7-Ucbr)
垢版 |
2017/07/18(火) 20:30:12.85ID:StSxL3ktr
>>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

なんか美しくないね。
ま、好きなように書き換えて。
0352デフォルトの名無しさん (ワッチョイ 974b-+vhE)
垢版 |
2017/07/18(火) 21:12:18.15ID:FECT5IdT0
>>349
objectを掴めてないときのemptyとか、開放できないときのオートメーションエラーとかに悩まされて、ある程度解決してたんですが、これで最終解脱できそうな予感。
ありがたや。
0353デフォルトの名無しさん (ワッチョイ 6fea-N0vF)
垢版 |
2017/07/18(火) 21:59:56.82ID:jNcdEVA90
ExcelからOutlookを起動し、予定表から会議依頼を作成するマクロを作成しています
あらかた思っていたものは作れたのですが、自分の予定表ではなく共有の予定表に保存する場合のコードがさっぱり分かりません
共有の予定表での作成方法をご教示頂けますでしょうか
0355デフォルトの名無しさん (オッペケ Srd7-Ucbr)
垢版 |
2017/07/19(水) 00:59:23.29ID:r34rJ2pSr
>>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
0356デフォルトの名無しさん (ワッチョイ f191-+gV6)
垢版 |
2017/07/19(水) 02:45:10.33ID:3ENxF81t0
>>355
isNoneが未定になるパスがあるんじゃね
0358デフォルトの名無しさん (ワッチョイ 974b-+vhE)
垢版 |
2017/07/19(水) 05:14:51.84ID:uwa7S77b0
>>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

みたいな使い方を考えたんですが、全然美しくない・・・
どうすれば良いでしょうか。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況