2ch勢いランキング アーカイブ

Excel VBA 質問スレ Part57


デフォルトの名無しさん [sage] 2018/09/10(月) 21:42:39.57:K1uuwFLt
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK


※前スレ
Excel VBA 質問スレ Part56
ttp://mevius.5ch.net/test/read.cgi/tech/1534976724/
デフォルトの名無しさん [sage] 2018/09/10(月) 22:24:34.33:IjRjzpeI
デフォルトの名無しさん [sage] 2018/09/10(月) 23:23:10.14:vQX+MQcw
このスレも相手の居ない淋しいプログラマの愚痴で埋まります
デフォルトの名無しさん [sage] 2018/09/11(火) 00:01:04.42:2R4DuIA+
「ここなら俺でもマウントとれるだろう」
と他所では負けっぱなしの奴らが集まってくる。
デフォルトの名無しさん [sage] 2018/09/11(火) 01:02:29.42:lrKPSTD5
Excel VBAに関する疑問を抱いて訪れた人がVBAerの惨状を垣間見て、人生に関する疑問を得て帰る
ここはそんなスレ
デフォルトの名無しさん [sage] 2018/09/11(火) 01:05:42.43:FQ+eV6sL
Dictionaryのキーと要素の静的型情報がどうしても消えてしまうのですがバグでしょうか?
デフォルトの名無しさん [sage] 2018/09/11(火) 01:11:22.91:lrKPSTD5

消えるってどういうこと?
デフォルトの名無しさん [] 2018/09/11(火) 07:05:37.39:qCfc++eI

仕様だと思う
デフォルトの名無しさん [] 2018/09/11(火) 07:06:20.92:qCfc++eI
System.Collection.Hashtableと使い分けるのがよろしいかと
デフォルトの名無しさん [sage] 2018/09/11(火) 08:08:45.45:U3vGX2sH

具体的にどういう現象?
デフォルトの名無しさん [sage] 2018/09/12(水) 18:53:39.93:lLVFOIbw
バイトの1とイントの1を入れて見るとわかるよ
デフォルトの名無しさん [] 2018/09/13(木) 06:42:08.49:MLrTlesq

Z
デフォルトの名無しさん [sage] 2018/09/13(木) 08:26:36.89:pD4xyyr1

VBAから使えるの?
俺はひとつ覚えでdictionaryだわ
デフォルトの名無しさん [sage] 2018/09/13(木) 12:39:09.37:2r3/pQLa
System.Collection配下のHashtable、ArrayListがVBAで使えるのは知ってる
デフォルトの名無しさん [sage] 2018/09/13(木) 18:10:13.06:FHzPesBg
どゆこと?
.NETランタイム仕込むの?
デフォルトの名無しさん [sage] 2018/09/13(木) 18:43:42.97:jnyPcCTa

ドトネトーのmscorlibはcomがあるんよ
CreateObjectでインスタンス化できる
参照設定でmscorlib.dllを読み込めば型指定できる
デフォルトの名無しさん [sage] 2018/09/13(木) 20:27:53.66:pD4xyyr1
hashtableとdictionaryはあるけど、hashmapはなかった希ガス
デフォルトの名無しさん [] 2018/09/13(木) 23:51:26.06:/ggcYMdi
excel vbaって、変数を日本語で定義することができるんだな
感動した
デフォルトの名無しさん [sage] 2018/09/14(金) 07:14:29.85:2+njywcI
今時だとできない言語の方が珍しいかも
デフォルトの名無しさん [sage] 2018/09/14(金) 07:57:23.09:5PCa/oFv
配列多用してプログラ厶書いたけどコレvbaしか出来ない事務レベルのやつは内容分かるんだろうか
職場では似非プログラマの自分とその他しかいないのでメンテ出来なくなりそう
デフォルトの名無しさん [sage] 2018/09/14(金) 08:38:51.08:cxzTGReq

コメント入れまくるんだ
デフォルトの名無しさん [sage] 2018/09/14(金) 08:53:13.81:itNItVhP
コメント入れる前に整理してくれ
汚いコードのコメントは汚くて結局わかりにくいままになるぞ
デフォルトの名無しさん [sage] 2018/09/14(金) 10:47:56.50:OPHSLG3r

主な操作対象が配列なのだったらむしろ分かりやすいのでは?
デフォルトの名無しさん [sage] 2018/09/14(金) 12:16:51.56:LywiNQOe
VBAをやっとこさいじれます、っていう感じの人には配列の理解は厳しいぞ
配列のサブスクリプト、コレクションのインデックス、ハッシュテーブルのキーの相互の違いが分からなかったりするからな
デフォルトの名無しさん [sage] 2018/09/14(金) 12:18:52.11:JMy0VfN7
配列の解説書をコメントに書いとく。
具体例を豊富に。
デフォルトの名無しさん [sage] 2018/09/14(金) 15:48:14.90:OPHSLG3r
配列が難しいだろうか...

俺にはわからん
デフォルトの名無しさん [sage] 2018/09/14(金) 17:49:25.94:Rix9Ja+2
まぁなんでもそうだろうと思うけど、判る人間には判らない人間がなぜ判らないのかが判らない w
デフォルトの名無しさん [sage] 2018/09/14(金) 18:47:04.71:5PCa/oFv
いや配列は分かるのかもしれん
ただプロシージャさえ使わず変数名にaとかbとか付けてたりで数百行書いてるようなマクロが散見されるほどうちのレベルは低いからちょっと不安
デフォルトの名無しさん [sage] 2018/09/14(金) 18:53:37.98:8jcNJm47
変数が分かるんなら配列も分かりそうだけど、そんなに難しいかな?
「配列っていうものもあるんだなー」程度でも認識さえしていれば、
むしろ配列しか使ってないコードならそのうち理解してくれそうな気がする。
途中でコレクションとか辞書とかヘンなオブジェクトとか自作クラスとか使ってなければ。タブン。
デフォルトの名無しさん [sage] 2018/09/14(金) 19:06:28.55:8jcNJm47
よく考えたら、コードの読みやすさは「何を使うか」より「どう書くか」の方が重要な気がする。
ともあれ、職場に何人かVBAが書ける人がいるようだから(非常に素晴らしいことに)、
適当に何人かひっ捕まえて使わせてみて率直な感想を言ってもらうといいんじゃなかろうか。
デフォルトの名無しさん [sage] 2018/09/14(金) 20:17:01.33:/DsKfDfg
Worksheet.CellsとかRange.Offsetとか、引数に二次元配列をとるアクセサを使えない人は結構いる印象だよな
デフォルトの名無しさん [] 2018/09/14(金) 23:44:55.63:za5qG/O1
配列の難しさがわからんのは配列すらわかっとらん証拠やぞプロさん達w
デフォルトの名無しさん [] 2018/09/14(金) 23:53:34.83:KNVYDbzH

どんなデータ構造にもそれなりに難しい点はある、と言われればそうだが、
配列で難しい点を具体的になにか挙げないと意味ないぞ。
デフォルトの名無しさん [sage] 2018/09/14(金) 23:54:08.70:yt+m1AZF
ワークシートの配列の方が難しいよね
デフォルトの名無しさん [] 2018/09/14(金) 23:56:00.89:za5qG/O1

意味がない、ではなくおまえには意味がわからんのやろ
知ったことかそんなもんw甘ったれんなカスw
デフォルトの名無しさん [sage] 2018/09/14(金) 23:59:40.89:KNVYDbzH
なるほど配列は易しいデータ構造ってことで
デフォルトの名無しさん [] 2018/09/15(土) 00:26:05.12:XNrqFkTO
excel vbaでテトリスとか作れるようになると、excel vbaを使いこなせられるようになったと思っていい?
デフォルトの名無しさん [] 2018/09/15(土) 00:37:49.64:0OTUBrr2

いくない、Excelはゲーム作成用ツールじゃない
デフォルトの名無しさん [sage] 2018/09/15(土) 07:26:48.93:OUVvcRON

いいんじゃね
テトリスができるようになれば次の課題が見えてくると思う
デフォルトの名無しさん [sage] 2018/09/15(土) 14:47:18.53:kCggA2zW
テトリス作れるレベルならそこらへんの私VBA得意ですドヤよりスキル的に遥かに上だから、
VBAらしく事務処理の自動化をやるくらい楽勝だよ
デフォルトの名無しさん [sage] 2018/09/15(土) 14:58:06.40:FpfMU/ZL
テトリス作る時間に他の勉強をするべき。
そこまで求められてないから無駄。
デフォルトの名無しさん [sage] 2018/09/15(土) 16:22:43.79:MP3gARzS

字面だけでいえば、「Excel VBAでテトリスが作れるレベル」なら、「Excel VBAはそれなりに使いこなせる」と言える。
ただ、それを訊いて何をしようとしているのか分からない。内容次第ではおすすめしない。
デフォルトの名無しさん [] 2018/09/15(土) 16:34:10.47:oLja5sKR
VBAでテトリス作る意味って何?
デフォルトの名無しさん [sage] 2018/09/15(土) 16:36:20.47:RH+0S0Ax
それなりというか世の中の自称VBAのプロのほとんど全員より上だろう
それ以上の人はVBAできますなんて恥ずかしくて言わない
デフォルトの名無しさん [sage] 2018/09/15(土) 16:54:50.81:g80wVNRI
エクセルVBAでテトリス作るのは芸ではあるけど実用的じゃない
どうせならエクセルで機械学習とか実務に使う余地があるものやれば
デフォルトの名無しさん [sage] 2018/09/15(土) 16:55:58.42:g80wVNRI
プログラマはVBAできます
なんてわざわざ言わない
他言語ができればできて当たり前だから
デフォルトの名無しさん [] 2018/09/15(土) 19:14:56.89:XNrqFkTO

vbaを使いこなせられるというか、これが作れるようになれば、この先いろんなツールをつくろうが、
応用がきくという意味で、テトリスという題材を選んでみた。

俺、間違ってることいってる?
vba使いこなせられるになる基準として、何かこういうの作ってみろ的なことがあればいってほしい。
デフォルトの名無しさん [sage] 2018/09/15(土) 19:25:00.03:vKLFrcGU
散らばった支社にプログラムを配るにしても、
完璧にシステム仕様が決まっていて、テストも十分終えたもの以外は、一つのExcelファイルに
 プログラム
 設定データ
 蓄積データ
をまとめるのはやめとけって忠告したのに・・・。

プログラムのバグ修正のたびに、支社の端末を直接操作しているVBAマスターを自称する後輩が・・・。
土日ももう呼び出し呼び出し。完全に病んでしまった。

あれほど忠告したのに・・・。
安易な作りでデータ等々を抱えると、プログラムの修正だけしたくても、簡単にはいかないから、
せめて蓄積データだけは別のエクセルファイルなりに保存して開いて使うなりの仕様にしとけと・・・。
デフォルトの名無しさん [sage] 2018/09/15(土) 19:56:51.35:JWnql4hZ

勘違いしてるようだが、テトリスはプログラミングの練習ネタとしてはかなり難しい部類だ
テトリスを自分で設計して作れたら、VBAを使いこなせるどころか世の中でVBAのプロを自称する連中の中でいきなり上位に入るレベル
それくらいVBAのプロのレベルは低い
つまり何が言いたいかっていうと、テトリスはやりすぎ
家計簿くらい作れたら十分面接でドヤっていいよ
デフォルトの名無しさん [sage] 2018/09/15(土) 20:11:22.09:qQRjJW7l

どういういみかもう少し噛み砕いてほしい
私よく意味はわかってないけど今まさに同じ道を辿ろうとしてるような気がする
デフォルトの名無しさん [sage] 2018/09/15(土) 20:13:33.91:kEjGAf/G
多数ユーザー向けにマクロを配布するならもうアドインにした方がいいよな
で、データの方はプログラムとのやりとりに支障が出ないようテーブル名、スキーマ、データフォーマットを固定したソースファイルに別途保存させる方がいい
デフォルトの名無しさん [sage] 2018/09/15(土) 20:52:56.93:CRrc/VBu
アドインやCOMアドインのベンダーにインターンで行ったが、VBAどころか、C++でガリガリ開発するスーパープログラマが何人もいて、速攻で就職先から外したわ
デフォルトの名無しさん [sage] 2018/09/15(土) 21:12:36.41:kEjGAf/G
C++でガリガリ開発ってそんなに凄い?
デフォルトの名無しさん [] 2018/09/15(土) 21:16:07.93:KIanXBkQ
C++でガリガリ開発しててもなんとも思わない

VBやウンコスクリプトでガリガリ開発してるのは
サルがオナニーしてるようにみえる
もしくは奴隷が単調な動作を繰り返してるようにみえる
デフォルトの名無しさん [sage] 2018/09/15(土) 21:19:37.63:CRrc/VBu

取っつきにくさでいうと、すでに子供の頃から馴染んでおかなければならないイメージ

俺みたいに遅蒔きで大学に入ってC++を初めてさわったレベルでは追い付けないな、と思った

きっかけは分析ツールみたいなアドインってどう作るのか知りたかったという位、その程度の熱意じゃ無理
デフォルトの名無しさん [sage] 2018/09/15(土) 21:20:38.13:CRrc/VBu
間違った
デフォルトの名無しさん [sage] 2018/09/15(土) 21:52:32.87:wUMJLM3O
VBAのほうが文法、ライブラリ、コミュニティレベルがお粗末だから難しいかな
モダンC++は昔とくらべてびっくりするぐらい生産性高いからね
デフォルトの名無しさん [sage] 2018/09/15(土) 21:57:22.88:wUMJLM3O

アマチュアの限界が来たんだね
後はプロに引き継ぎなさい
デフォルトの名無しさん [] 2018/09/15(土) 21:59:21.10:XNrqFkTO
セル内に
"aiueo"
とか
≪aiueo≫
が格納されていたとして、
囲い文字だけを抽出するにはどうすればいいですか?

"aiueo"の場合は、全部半角なので、配列に代入して、配列の先頭と末尾を参照すればいいのだが、
≪aiueo≫の場合、全角・半角の区別がつかないので(どちらでもない?)、どうやればいいのか。
デフォルトの名無しさん [sage] 2018/09/15(土) 22:10:32.77:JUwQwotH

まともなプログラマなら正規表現を使う
VBA厨止まりでいいならLeftとRightを使う
デフォルトの名無しさん [] 2018/09/15(土) 22:18:05.27:KIanXBkQ
  A         B 
1 "aiueo" =(LEFT(A1,1))&(RIGHT(A1, 1)) ⇒ ""
2 ≪aiueo≫ =(LEFT(A2,1))&(RIGHT(A2, 1)) ⇒ ≪≫

オレならVBAなんか使わずにこうする
デフォルトの名無しさん [] 2018/09/15(土) 22:28:08.97:XNrqFkTO

正規表現を使う場合
@事前に囲い文字を把握しておく
Aコード内では、囲い文字をキーにgrep
Bgrepの結果から、先頭/末尾に囲い文字が含まれていれば確定。
という流れですか?
デフォルトの名無しさん [sage] 2018/09/15(土) 22:34:12.08:kEjGAf/G

正規表現使えば何とかなるよ
基本的には、aiueoが見つかった場合に見つかった文字列の開始位置と終端位置からそれぞれ一文字分外側にオフセットさせた文字列を取ればいい

"aiueo"のようにaiueoの中に2バイト文字が混在してる場合も抽出しなきゃならないような特殊な場合は文字列の範囲指定がちょっと面倒かもしれないが
デフォルトの名無しさん [] 2018/09/15(土) 22:37:58.41:XNrqFkTO

これ使えるね
全角の<、半角の<に入れ替えても、ちゃんと囲い文字だけを抽出してくれてる。。
デフォルトの名無しさん [sage] 2018/09/15(土) 22:41:36.90:kEjGAf/G

囲い文字が特定できるならそれが正解
デフォルトの名無しさん [sage] 2018/09/15(土) 22:46:04.69:JpPL0LlT

囲い文字以外を置き換えで消しちゃえばいいんじゃね
検索文字列は"[^\(\)\[\]\"\'「」『』《》]"みたいな感じで
最初の一文字と最後の一文字取るだけならもっとスマートに出来るけど囲い文字が無い場合は括弧以外を抽出しちゃうし
デフォルトの名無しさん [sage] 2018/09/15(土) 22:51:05.07:h6vRwHat
LENBなどB付き関数を使わない限り、半角全角は考える必要ないだろ?Excelは内部では全部Unicodeで扱ってる
デフォルトの名無しさん [sage] 2018/09/15(土) 23:14:10.61:VdLZkjGs
テトリスなんか複雑すぎて、VBA の奴に作れるわけないだろw

回転もあるし、壁にめり込んだり、
そもそも1秒に10回でも、描画できるか?

そんな性能あるか?
デフォルトの名無しさん [] 2018/09/15(土) 23:15:54.34:8rxpHkWL
一秒に1回しか動かんのになんで10回も描画せなあかんねんw
デフォルトの名無しさん [sage] 2018/09/15(土) 23:18:58.10:h6vRwHat
回転は最低3回/秒位必要だろうし、落ち速度が速くならないテトリスじゃかたておちだろ
デフォルトの名無しさん [] 2018/09/15(土) 23:35:07.83:XNrqFkTO

>@事前に囲い文字を把握しておく
で、囲い文字があるかないか、事前に分類しておく
分類後、囲い文字があるものに対して、
vbaを使わずにleft、rightを使って抽出。

これで囲い文字の種類を全部押さえていることになる。
後は、コード内で正規表現(grep)使ってうまくやればなんとかなりそう。
デフォルトの名無しさん [] 2018/09/16(日) 00:44:02.64:sPpLNVSR
ちょっとよくわからんのだけど
"aiueo≫
とか
≪"aiueo"
とか
≪"aiueo≫ "
はエラーとして除外するの?
デフォルトの名無しさん [] 2018/09/16(日) 01:22:34.32:k7pdoQET

エラーとして除外する。
デフォルトの名無しさん [sage] 2018/09/16(日) 02:44:47.45:BKY25fNA

VBAテトリスって余興みたいなものだから

応用力を見る題材というならたとえば
在庫や売上の情報から在庫切れや長期在庫
利益率ランキングを算出するとか
株式情報から各種指標を算出するとか
そういうのがビジネス寄りで適切だと思う


テトリス自体はそんな難しくない
しいていえばゲームは全部GUIに依存するから
その部分が複雑になりがちなだけ
デフォルトの名無しさん [sage] 2018/09/16(日) 02:48:34.41:BKY25fNA

>一つのExcelファイルに
> プログラム
> 設定データ
> 蓄積データ
>をまとめるのはやめとけって忠告したのに

分かる
要はハードコーディングでしょ
デフォルトの名無しさん [sage] 2018/09/16(日) 02:51:31.52:BKY25fNA

正規表現がプログラミングの正攻法

なお「<a><b>c</b></a>」
こういうタグの入れ子構造は
正規表現で処理するのは難しい
デフォルトの名無しさん [sage] 2018/09/16(日) 07:54:39.60:GNhjMZyx
ゲーム作れるから事務処理作れるっていう発想が実務浅いんだろうな
デフォルトの名無しさん [sage] 2018/09/16(日) 09:28:10.74:e7XchwPX
VBAを使いこなしたいとは思っているようだけど、「事務処理に使う」とは言ってないのでは。
俺はそのままやってみたらいいと思ってる。Excel VBAでアニメーション作った動画とかもポロポロあるわけだし。
ttp://https://twitter.com/excelprog/status/993022444221808640とか)
目標が分からないし、何をやりたいにせよ好奇心を止めることはできないし。
ttp://https://twitter.com/5chan_nel (5ch newer account)
デフォルトの名無しさん [sage] 2018/09/16(日) 10:51:52.18:SnNXv25N
実用性で言ったら他の言語を使えばいいじゃんってなるから
こうやってVBAを使うことそのものを目的にして遊ぶのは悪くないと思う
デフォルトの名無しさん [sage] 2018/09/16(日) 11:32:42.62:gTaOdbFs

テトリスってそんなに複雑か?
ゲームの中では簡単に制作できるほうだろ
デフォルトの名無しさん [sage] 2018/09/16(日) 12:11:54.55:570fQ2zr

既に存在するけど、テトリス
デフォルトの名無しさん [sage] 2018/09/16(日) 12:38:30.87:eHdm07t1
JavaのAPI仕様みたいな、VBAのプロパティやメソッドが一覧になってるサイトや書籍てありますか?
他人のソース読むとき、公式のやつが英語のみで辛いんです……
デフォルトの名無しさん [sage] 2018/09/16(日) 14:28:02.06:gTaOdbFs

ゲームを題材にするならRPGが最適じゃないかな
RPGならデータをこねくり回すしExcelVBAの勉強には良さそうだが

キャラや地図のデータをワークシートに保存して
VBAでそれにアクセスしながらゲームを進行させる感じで
デフォルトの名無しさん [sage] 2018/09/16(日) 18:44:46.22:krLSHvzW
VBAマリオだってあるんだし
作ろうと思えば、ある程度までは可能だろう
デフォルトの名無しさん [sage] 2018/09/16(日) 20:14:07.75:BKY25fNA
そもそもVBAはアクションゲームに向かないんだよ
もう技術がある人がそれを承知で芸をやるのは良いけど
実用にしたいならビジネス用の題材を取った方が良い
デフォルトの名無しさん [sage] 2018/09/16(日) 20:17:15.86:BKY25fNA

RRGはテトリスよりは題材としてマシだと思う
ドラクエみたいな普通のGUIのRPGを
エクセル方眼紙で再現するとかだと筋悪いけど

そうじゃなくてCUIのRPGで
アイテムとかデータ構造の構築と管理を中心に組めば
ビジネスにも応用が利くと思う
デフォルトの名無しさん [] 2018/09/16(日) 21:26:15.56:k7pdoQET
csvファイルがあって、これをexcelに読みおませると
表が崩れてしまう。

csvの中身
--
1,my name is taro
2,hello,world
--
excelに読み込ませると以下のように表が崩れてしまう。
A B C
1 1 my name is taro
2 2 hello world

期待値は、hello,worldをコンマ(,)で区切らず、B1セル内に格納したい。

まずvbaを使わずになんとかできない?
デフォルトの名無しさん [] 2018/09/16(日) 21:29:05.54:k7pdoQET

確かにRPGのほうがワークシートの保存とかデータ構造の管理とか色々関わってくるのでテトリスよりは題材としてマシなレベルですね
デフォルトの名無しさん [] 2018/09/16(日) 21:31:24.63:k7pdoQET
87ですが、vbaで加工しないといけない場合、どういった整形処理が考えられますか?
デフォルトの名無しさん [] 2018/09/16(日) 21:31:41.83:sPpLNVSR

CSVの意味わかってる?
デフォルトの名無しさん [sage] 2018/09/16(日) 21:33:00.45:e7XchwPX

CSVデータの仕様が悪い気がする。
カンマを含むデータならダブルクォーテーション""で括られているべき。
デフォルトの名無しさん [] 2018/09/16(日) 21:36:22.33:k7pdoQET

CSV(コンマで区切って表示するもの)なので、
hello,world→helloとworldに分割されるのは当然と言えば当然ですが、、。
デフォルトの名無しさん [] 2018/09/16(日) 21:40:43.38:SOVIz+sV
逆だ
CSVはこうしたほうがいいというメモを
無視してるのはキミラ低学歴知恵遅れなワケ

カンマか改行かダブルクォーテーションが項目に含まれる場合
ダブルクォーテーションでくくるべきだ
さらにダブルクォーテーションが含まれる場合、
2個のダブルクォーテーションでエスケープするべきだ

ttp://https://tools.ietf.org/html/rfc4180

6. Fields containing line breaks (CRLF), double quotes, and commas
should be enclosed in double-quotes. For example:

"aaa","b CRLF
bb","ccc" CRLF
zzz,yyy,xxx

わかった?
デフォルトの名無しさん [sage] 2018/09/16(日) 21:45:22.98:e7XchwPX

1,my name is taro
2,hello,world

1,"my name is taro"
2,"hello,world"
※my name is taroは括られている必要はないが、統一した方が良い
デフォルトの名無しさん [] 2018/09/16(日) 21:45:42.24:sPpLNVSR

そもそも何がしたいのか?
1列目:ナンバー
2列目:内容
という固定フォーマットで区切りがカンマだってならそのように分解すればいい。
InStrで最初のコンマを探せばいいだろうよ。
デフォルトの名無しさん [] 2018/09/16(日) 21:45:49.49:k7pdoQET

つまり、CSVデータの仕様が悪いので、これ作った人になんとかしろというしかないか。
デフォルトの名無しさん [sage] 2018/09/16(日) 21:48:00.44:e7XchwPX

カラム数が一定かつ「hello,world」なカラムが一つしかないなら、泥臭いやり方で直すことはできなくもない。
デフォルトの名無しさん [sage] 2018/09/16(日) 21:52:12.15:T59P/aqG

はっきり言ってCSVデータとして「壊れてる」

というかどのカンマが残ってどのカンマが区切りなのか
理論的に説明できないならVBAだろうと無理
デフォルトの名無しさん [] 2018/09/16(日) 21:53:10.26:SHD7Rtu/
VBAでダメならPowerShellの出番だな
デフォルトの名無しさん [] 2018/09/16(日) 21:54:27.21:SOVIz+sV
仕様はまったく悪くない
適切に読み込める
普通に矛盾なく読み込めるようになってる
ちゃんと読み込めないのは頭悪いから
自分が頭悪いのを棚にあげるのはよくない

A  B  C     D                E 
AHO " hoge,huga boo CRLF foo CRLF woo BAKA
baka



AHO,"""","hoge,huga","boo CRLF foo CRLF woo",BAKA crlf
baka

この形式で出力されてないデータはそもそもcsvじゃない
デフォルトの名無しさん [] 2018/09/16(日) 21:55:20.90:k7pdoQET

最終的には表を
1列目:ナンバー
2列目:内容
にそろえたい。
2列目の内容には、英文が入る。英文には文章の区切り点としてコンマ(,)がよく使われる。
デフォルトの名無しさん [sage] 2018/09/16(日) 22:08:17.61:e7XchwPX

・1行の列数はn列
・カンマが含まれる列は最も右の列だけ
の場合なら、左からn-1個目のカンマから右の文字列は全て問題のフィールドと解釈して処理すれば良い。
デフォルトの名無しさん [sage] 2018/09/16(日) 22:16:05.95:e7XchwPX
ああ、通常に考えるとまともに使えるCSVファイルではないので、
たぶん、CSVファイルを作成した後のことは何も考えないで作ったか、
あるいは特定のプログラム内でしか使わないことを想定したデータ(つまりCSVじゃない)かのどちらかだろうと思う。
もし前者なら、その仕様でCSVファイルを作成した(ツールを作成した)人には言っといた方がいい。
デフォルトの名無しさん [] 2018/09/16(日) 22:24:51.91:SHD7Rtu/

読み込む前に整形すれば良い
PowerShellならワンライナー

cat test.csv | % {
$i = $_.IndexOf(",")
($_.Substring(0, $i), "`"$($_.Substring($i + 1, $_.Length - $i - 1))`"") -join ","
} | Out-File "dest.csv"
デフォルトの名無しさん [sage] 2018/09/16(日) 22:33:25.75:IXQKD+r/
カンマが嫌ならタブ区切りにする
どちらにしろ元データは要修正だよ
デフォルトの名無しさん [sage] 2018/09/16(日) 22:42:58.47:gTaOdbFs

そうそうCUIベースのRPG
ワークシートごとにキャラデータやアイテムデータ、地図データなどを設定して
CUIで画面構成して進行する感じ

クエリワークシートなども用意して簡易データベース的に
データを利用してゲーム進行してやれば結構いい勉強になると思う
デフォルトの名無しさん [sage] 2018/09/16(日) 22:44:29.60:bux1ZB5P
tsv形式のcsvファイルに作り直した方が良いと思うわ
デフォルトの名無しさん [sage] 2018/09/16(日) 22:45:20.56:mzkrOy05

powershellならget-content使え
置き換えも-replace一発で正規表現で出来るだろ
デフォルトの名無しさん [sage] 2018/09/16(日) 22:48:48.42:+ao0anr7

そんなややこしい事しなくても
cat test.csv | %{ $i = $_ -split ',',2; "$($i[0]),""$($i[1])""" } > dest.txt
でいいでしょ
デフォルトの名無しさん [] 2018/09/16(日) 22:48:54.01:SHD7Rtu/

catはget-contentのエイリアス
正規表現使わなくてもできる

自分はこう書くっていうのがあるなら
僕にレスせずにそれを出すべきかと
デフォルトの名無しさん [sage] 2018/09/16(日) 23:09:32.96:16Y59QgZ
powershellが便利でVBAの出るまくなしってのはよくわかったけど
ここはVBAスレだからせっかくなのでVBAで解答を書いてみてよ
だいたい5行ぐらいでできるかな?
デフォルトの名無しさん [] 2018/09/16(日) 23:10:09.34:k7pdoQET
Inputがtxtなので、中身をみてコンマ(,)で区切られているので、CSVと勘違いしてしまったかもしれない
作った人に、CSVか確認してみます。
デフォルトの名無しさん [sage] 2018/09/16(日) 23:27:45.95:EK9e0hMh
CSV はカンマ区切りだから、列にカンマが入る可能性を考えて、各列を、" で囲む。
列内で、カンマを使いたい場合は、\ でカンマをエスケープする。\"

列内の文字列、a\"b
列、"a\"b"

それか、TSV。タブ区切りを使う。
ただし、これも列内にタブを使わないようにすべき

基本、システムを知らない人には、設計(SE)はできない!
こんなの誰でも知っている常識だからw
デフォルトの名無しさん [] 2018/09/17(月) 00:05:45.07:dj7qSZnZ
また低学歴知恵遅れがテキトーなこと書きこんでるわ。。。
デフォルトの名無しさん [] 2018/09/17(月) 00:11:35.39:dj7qSZnZ
一般化すればこうなる

列のデリミタや行のデリミタ、もしくは引用符を含む場合
引用符で括る
引用符が含まれる場合、引用符は引用符の前に引用符を1つ記述する

csvの場合、
 列のデリミタはカンマ
 行のデリミタはCRLF
 引用符はダブルクォート
になる

タブ区切りの場合、列のデリミタはHTになる

わかった?
デフォルトの名無しさん [] 2018/09/17(月) 00:22:08.36:27GPeyCI

Dim fs, src, dest, line, i
Set fs = CreateObject("Scripting.FileSystemObject")
Set src = fs.OpenTextFile("test.csv", 1)
Set dest = fs.OpenTextFile("dest.csv", 2, True)

Do Until src.AtEndOfLine
 line = src.ReadLine()
 i = InStr(line, ",")

 Call dest.WriteLine(Join(Array( _
  Mid(line, 1, i - 1), _
  """" & Mid(line, i + 1, Len(line) - i) & """"), ","))
Loop

Call dest.Close()
Call src.Close()
デフォルトの名無しさん [] 2018/09/17(月) 00:26:30.19:27GPeyCI

RFCはそうだけど
"を\でエスケープするやり方もあるよね
デフォルトの名無しさん [] 2018/09/17(月) 00:36:24.95:dj7qSZnZ
そんな低学歴知恵遅れマイルールは
低学歴知恵遅れのマイルールが通用するシステムでないと通用しない

低学歴知恵遅れのやりかたの別のファイル形式になる
低学歴知恵遅れのやりかたとcsvの形式は一切関係ないからな

なんで低学歴知恵遅れは
低学歴知恵遅れのマイルールを押しとうそうとすうんの?

低学歴知恵遅れの世界でしか通用しないのに
デフォルトの名無しさん [] 2018/09/17(月) 00:38:15.86:dj7qSZnZ
この内容のExcelをcsvに出力する

A   B    C
aho boo"foo baka
aho boo"foo baka

普通に

aho.csv

aho,"boo""foo",baka
aho,"boo""foo",baka

と出力される
デフォルトの名無しさん [] 2018/09/17(月) 00:42:08.45:dj7qSZnZ
こんな内容のaho1.csvをExcelにインポートする

aho,"boo\"foo",baka
aho,boo\"foo,baka

結果はこうなる

A   B    C
aho boo\foo" baka
aho boo\"foo=@baka

こんな内容のaho2.csvをExcelにインポートする

aho2.csv

aho,"boo""foo",baka
aho,"boo""foo",baka

結果はこうなる

A   B    C
aho boo"foo baka
aho boo"foo baka

当然

はっきりいってな
低学歴知恵遅れのマイルールなんかどうでもいいわけ
低学歴知恵遅れが出力するファイルはそもそもcsvじゃない
デフォルトの名無しさん [] 2018/09/17(月) 00:44:37.73:27GPeyCI

エクセルの動作の話をしておられるわけですね
それについては異論はないっす

一般的なCSVの仕様として"を\でエスケープすることも
あるよねってことです

RFCは後付ですし
デフォルトの名無しさん [] 2018/09/17(月) 00:48:00.11:dj7qSZnZ
ttp://https://tools.ietf.org/html/rfc4180

7. If double-quotes are used to enclose fields, then a double-quote
appearing inside a field must be escaped by preceding it with
another double quote. For example:

"aaa","b""bb","ccc"

RFCにもちゃんと書いてあるからな

excelでは読み込めない
コレはもう業界ではペケなワケ
もうデファクトスタンダードなワケ

それが分からないから
低学歴知恵遅れなワケ
デフォルトの名無しさん [] 2018/09/17(月) 00:55:43.10:27GPeyCI

RFCができる前からCSVは存在してるよ
RFCとは違う仕様も存在するんよ

デファクトスタンダードはそれはそうだと思いますよ
規格として標準なわけではなく事実上の標準だから
"を\でエスケープするものがあってもおかしくないっすね
デフォルトの名無しさん [] 2018/09/17(月) 00:56:49.34:27GPeyCI
""でエスケープしたらエクセルでインポートできるよってことを言いたいんですよね、わかりますよ
デフォルトの名無しさん [sage] 2018/09/17(月) 00:59:23.34:TeavGsnR
フォーマット微妙に変なのをExcelにインポートしたいってとこから話始まってるし

いくら世界がそうあるべきだと言ったって
現におかしなフォーマットのcsvが目の前にあったらどうにかしないといけない

半角君はどうするんだろう
デフォルトの名無しさん [] 2018/09/17(月) 01:04:33.71:dj7qSZnZ
のケースである場合、
どうしてもエクセルにインポートしてほしいという依頼がきたら
サクラエディタつかって正規表現使って最初のカンマの部分をタブに置換してコピペする

ファイルがクソでかいばあい、sedで正規表現使って最初のカンマの部分をタブに置換する
デフォルトの名無しさん [] 2018/09/17(月) 01:08:02.43:27GPeyCI
サクラエディタもsedも使えない状況なら半角さんどうするんですか?
デフォルトの名無しさん [] 2018/09/17(月) 01:09:43.54:dj7qSZnZ
wshでjavascript使って編集する
デフォルトの名無しさん [] 2018/09/17(月) 01:10:23.76:dj7qSZnZ
sedが使えない = unixクローンは使えない
ということになるからな
デフォルトの名無しさん [] 2018/09/17(月) 01:11:33.13:27GPeyCI
JScriptですか渋いっすね
デフォルトの名無しさん [] 2018/09/17(月) 01:31:17.15:dj7qSZnZ
wshならどんな古いくさった端末でも入ってるからな
個人情報の問題で、データを格納できる計算機が制限される、アタリマエだが
デフォルトの名無しさん [sage] 2018/09/17(月) 02:09:43.67:+OwpPL9I

実際に出てきたcsvでやるしか無いんだから出来ない言い訳並べてもしょうがないでしょ
デフォルトの名無しさん [] 2018/09/17(月) 02:40:44.60:DOsrYmK4
ある都合でVBAでプログラミングを学びたいんですが、おすすめの参考書やサイトありますか?
デフォルトの名無しさん [] 2018/09/17(月) 03:00:28.28:dj7qSZnZ
できない言い訳なんか書いてないからな
それはcsvじゃないといってるワケ

低学歴知恵遅れの世界で呼称されてるcsvは
低学歴知恵遅れの世界のcsv()といってるワケ

わかった?
デフォルトの名無しさん [] 2018/09/17(月) 03:01:56.29:dj7qSZnZ
ホントな低学歴知恵遅れは
低学歴知恵遅れのマイルールを押し付けようとするから困るワケ
デフォルトの名無しさん [sage] 2018/09/17(月) 03:29:18.86:KiXF7SKJ

>VBAでプログラミングを学びたい
VBA「の」じゃなくてVBA「で」?
学びたいのはプログラミング自体?

それならVBAはGUIがついてて便利なので入門用言語には良いが
最終的にはVBA以外のプログラミング言語も習得した方が良い

というのはあくまでVBAのベースはBASICなので
VBAプロパーだとプログラミングの筋が悪くなる


>おすすめの参考書やサイト
まずは大きな書店に行って
PC関係の売り場で中身をパラパラめくって
分かりやすそうな入門書を一冊買って読もう

もちろん「VBA」で検索して出てきたサイトを見れば
金は掛からないが説明が微妙なところもあり不安が残る
デフォルトの名無しさん [sage] 2018/09/17(月) 03:42:24.53:O0m9WfJA
CSV, TSV の仕様

delimiter : フィールド区切り。カンマ・タブが多い
quotechar : フィールドを囲む文字。" が多い

escapechar : フィールド内に、quotechar を含む場合に、その前に付けるエスケープ文字。
\ か、" が多い。

a\"b → "a\"b"
a""b → "a""b"
デフォルトの名無しさん [sage] 2018/09/17(月) 07:53:46.06:u5HISWee
そんな50レスも引き延ばすようなネタか?(呆
デフォルトの名無しさん [sage] 2018/09/17(月) 08:33:44.47:KWfY0Z4o
VBAスレならこれぐらいの話題がちょいどいいレベルでしょう
デフォルトの名無しさん [sage] 2018/09/17(月) 08:38:11.40:SBpxj18K
久々に食い付けるネタだったんだろ w
デフォルトの名無しさん [sage] 2018/09/17(月) 08:59:01.79:x2+cUCF9
あるファイルを修正する前に、そのファイルを_bak.csvみたいに同じディレクトリにバックアップしたいんだけど、vbaからだとどうすればいい?
filesystemobjectとか使うの?
デフォルトの名無しさん [] 2018/09/17(月) 09:02:08.97:dEktkUWz

別にマイルール押しつけてるつもりはないよ。俺はプログラミング歴本当浅いし。
間違ってれば指摘して訂正すればいいだけの話じゃない?

それはさておき、なんだかんだで、答えてくれてるので、回答どうもw
デフォルトの名無しさん [sage] 2018/09/17(月) 09:40:45.98:u5HISWee

Private Sub Workbook_BeforeSave()
のサブプロシージャで適当に。バックアップ世代管理をどこまでやるかで変わるが簡単にやるならSaveCopyAsでいい。
デフォルトの名無しさん [sage] 2018/09/17(月) 09:45:04.21:x2+cUCF9

そのもののイベントがあるのね
ありがとう
デフォルトの名無しさん [] 2018/09/17(月) 15:03:24.49:Z7EfKxAW

ありがとうごじゃります
おっしゃるとおりで!
古本屋には無かったのでネットでサンプルでも見ながら探します!
デフォルトの名無しさん [sage] 2018/09/17(月) 19:47:37.68:3YPJfo/c
どんなCSVでもテキスト処理すれば良いだろ。
Excelで開いて崩れるならそれは無理すじというもの。

見えるデリミタが既に嫌なので、見えない文字をデリミタに使ってCSVもどきとかにしてたこととかあったな。
デフォルトの名無しさん [sage] 2018/09/17(月) 20:21:50.63:u5HISWee
まだ引っ張るのかw
デフォルトの名無しさん [sage] 2018/09/17(月) 20:25:15.40:pGKPj11G
あんまり同じ話ばかりしてるとまた半角先生に低学歴知恵遅れって言われるぞ
デフォルトの名無しさん [] 2018/09/17(月) 21:34:58.01:8X2LVp/6
「関数を使うかVBAを使うか」なんて文章を見てもにょらないのか?
デフォルトの名無しさん [sage] 2018/09/17(月) 21:48:19.81:3YPJfo/c
普通に一般的じゃないCSVなんてごまんとあるだろ。
3270が吐き出したCSV(といっても結局プログラムが吐き出してるわけだけど)とか、固定長CSVとか。
カンマ区切り以外は何でもアリと考えるべき。
どうせ、どんな仕様でも対応できるだろ。
大した話じゃない。

基本的な話だがCSV開く時はOpenTextって話がまだ無いようだが、それでダメなら自前でどうとてもするだろ。
デフォルトの名無しさん [sage] 2018/09/17(月) 21:50:33.98:3YPJfo/c

開く前にファイルコピーでも何でも良いじゃん。
デフォルトの名無しさん [sage] 2018/09/17(月) 22:29:17.24:nCCekO+f
ttp://https://qiita.com/areanoblog/items/095abe477fd04bbfc7c4
VBAからpowershell呼び出すのって↑こんなまわりくどいの?
powerhellの実行結果を一旦テキストファイルとかに出してそれをまたVBAで読み込むとか?
めんどくさ…('A`)
デフォルトの名無しさん [sage] 2018/09/17(月) 22:31:24.18:w2PHbw/n
固定長CSVとか言うパワーワード
デフォルトの名無しさん [sage] 2018/09/17(月) 22:52:13.82:nnZrg0Mh
固定長CSV笑った
でも世の中には実在するんだろうな
デフォルトの名無しさん [] 2018/09/17(月) 22:57:01.63:AYOVQ736
なになに?またプロさん知ったかぶりしとんの?
デフォルトの名無しさん [sage] 2018/09/17(月) 23:15:23.57:pGKPj11G

こんなことやるならPS側で処理した方が絶対良いよな
PSから直接Excel触れるんだから
デフォルトの名無しさん [sage] 2018/09/17(月) 23:30:51.51:O0m9WfJA
Office は高い

Ruby で、VSCode の拡張機能の、Excel Viewer で十分
デフォルトの名無しさん [sage] 2018/09/18(火) 02:54:36.14:ziBnUm70

働いたこともないニートだったか
デフォルトの名無しさん [sage] 2018/09/18(火) 04:01:32.86:e8HHTJEv


オレもPS側から処理する方が基本的に筋が良いと思う
PSの方が汎用的で記述性が高いから
デフォルトの名無しさん [] 2018/09/18(火) 05:54:19.55:QjGqbTDe
PSキチガイ、Rubyキチガイが登場したから、後はC#キチガイが出てくればいつもの通りの流れ
デフォルトの名無しさん [] 2018/09/18(火) 05:56:46.48:KvvcKQiM
まだマッチポンプやってるんかお前?
デフォルトの名無しさん [sage] 2018/09/18(火) 06:07:52.72:RfbXDeCO
俺はC#の役も出来るから必要なら呼んでくれ
デフォルトの名無しさん [sage] 2018/09/18(火) 07:32:33.78:cnS9oStk
表形式もWPFのほうが安全で楽で表現力高いと気付いてから俺の中でVBAの出番は完全になくなった
VBAの使い道を必死で探してるが見つからない
デフォルトの名無しさん [sage] 2018/09/18(火) 08:05:31.56:RfbXDeCO
WPFはデータとプログラムソースを完全分離出来るからな
VSさえ自由に使えるなら安全で良い
デフォルトの名無しさん [sage] 2018/09/18(火) 08:14:28.81:/U1cQ/02
働いたこともないニートだったか
デフォルトの名無しさん [sage] 2018/09/18(火) 08:34:54.62:NAn2Eeof
自己紹介乙
デフォルトの名無しさん [sage] 2018/09/18(火) 08:53:19.81:RfbXDeCO
働いたことがないニートなのはこのスレの参加条件だからニート歴の年数で勝負すべき
デフォルトの名無しさん [sage] 2018/09/18(火) 09:11:00.17:6gy5jGhe

言語として使いやすいから、とか
デフォルトの名無しさん [sage] 2018/09/18(火) 12:06:42.40:oc0rxGPX

その皮肉はちょっとよくわからない
デフォルトの名無しさん [sage] 2018/09/18(火) 12:13:47.72:PpRa0G4r
面白いギャグだね
デフォルトの名無しさん [sage] 2018/09/18(火) 12:16:08.60:/U1cQ/02

君の作ったのがExcelの完全上位互換でもない限り、上司からセルの色が変えられないとか関数が使えないとか言われるのがオチ。

ニートの意味プログラムの世界では成立するかもね。
デフォルトの名無しさん [] 2018/09/18(火) 12:22:42.63:Xx2CgWoL
そもそもエクセルの使い方わからんプロさん達やし致し方ない
デフォルトの名無しさん [sage] 2018/09/18(火) 12:34:01.22:PpRa0G4r

そういうエクセルを使うことが目的になってる残念上司にはエクセルをエクスポートして渡しておけばいいよ
こっちはあくまで生産性上げるためにやってるわけだからね
もちろん色を変えることにビジネス上の合理性があるなら実装するがね
色を変えて遊びたいだけじゃ話にならん
デフォルトの名無しさん [sage] 2018/09/18(火) 12:51:14.99:/U1cQ/02

それだったらExcel使う必要無いわけだ。
上司や社長にそう言ってみれば良いんじゃね。

色だけの問題じゃねえっての。
完全上位互換で気付かないかねえ。
だから二―トと言われるんだぞ。
デフォルトの名無しさん [sage] 2018/09/18(火) 13:59:55.38:oc0rxGPX
自分から具体的な事を言わずに相手の反応を待つ方法、
馬鹿が頭良く見せる時によくやるけどその内相手にされなくなるよ
デフォルトの名無しさん [sage] 2018/09/18(火) 15:33:00.72:6gy5jGhe

デフォルトの名無しさん [sage] 2018/09/18(火) 19:05:07.35:7cRL6s2e
初心者の典型的な勘違いだね
「なんでも出来る方が良いに決まってる」
でも、実際には逆なんだな

例えば標準エクセルの完全上位互換なら、すべてのセルの色を変えれることになるが
そうすると色を変えてほしくないセルまで変えてしまう人が現れる
色だけじゃなく、ありとあらゆる機能について似たようなことが言える
先人たちは失敗に学び、なんでも出来るツールよりも、僅かな仕事を上手くやるツールを組み合わせたほうが良い、という答えにたどり着いた

事務員のみんなは、学ぶべき先人が居ない環境でプログラミングを覚えてきた
だから、こういう基本的なことが身につかないままの人が多いんだ
デフォルトの名無しさん [sage] 2018/09/18(火) 19:09:22.99:/U1cQ/02

あれあれ?
「関数が使えない」を無視した上に、「完全上位互換でもない限り」の文意を読み取ろうともせずに「具体的なことを言わず」と相手を批判ですか?

何でも全て自分は悪くないですか。
そうですか。
デフォルトの名無しさん [sage] 2018/09/18(火) 19:10:47.69:/U1cQ/02

それじゃ既に誰もExcel使ってないっての。
ところが現実は違う。
デフォルトの名無しさん [sage] 2018/09/18(火) 19:22:55.63:7cRL6s2e

それだけリテラシーの低い人が多いということ
多数派が賢いというのも典型的な勘違いの一つだね
デフォルトの名無しさん [] 2018/09/18(火) 20:11:57.47:WcZLZMlj
セル内の文字列をコピーする際、セルごとコピーしようとしたら、余計な情報までコピーするからやめろといわれた。本当ですか?
デフォルトの名無しさん [sage] 2018/09/18(火) 20:14:47.13:uHQ14XDu

コピペのやり方とどこに貼り付けるか次第かなー
デフォルトの名無しさん [sage] 2018/09/18(火) 20:38:53.34:dgXQ4G2s

値貼り付けならまぁなんとか
コピーしてそのまま貼り付けは鬱陶しいな
デフォルトの名無しさん [sage] 2018/09/18(火) 21:38:06.78:NAn2Eeof
書式貼付けとか出来るようになったのは嬉しいけど罫線そのままフォントとか背景色をコピーとかしたいわ

要望に限りはないな…
デフォルトの名無しさん [sage] 2018/09/18(火) 22:18:22.89:J2IpRlny

コピー元のセルとコピー先のセルをそれぞれRange型変数に格納して、あとはコピー元の任意のプロパティの定数値をコピー先のプロパティの値としてそのまま代入するだけ
デフォルトの名無しさん [sage] 2018/09/18(火) 22:25:10.68:dgXQ4G2s

罫線だけ貼り付けあるで
デフォルトの名無しさん [sage] 2018/09/18(火) 23:02:58.12:/U1cQ/02

???
多数派が賢いとは言ってない。
そもそもの話から理解出来ないなら引っ込んでろよ。

会社は君一人だけで成り立っているわけじゃない。
デフォルトの名無しさん [] 2018/09/18(火) 23:05:19.45:oE0uJFU6
なんかVBAできる程度でイキってる低学歴知恵遅れがいるのか
デフォルトの名無しさん [sage] 2018/09/18(火) 23:12:46.57:/U1cQ/02
独りよがりの二―トならいるが。
デフォルトの名無しさん [] 2018/09/18(火) 23:19:04.19:3Z5SLW4f
vba出来なくてイキられとるプロさん達w
デフォルトの名無しさん [sage] 2018/09/18(火) 23:32:08.88:dgXQ4G2s

そりゃ事務作業がほぼ0になるんだからイキってもいいよ
デフォルトの名無しさん [sage] 2018/09/18(火) 23:57:53.79:J2IpRlny
VBAは作ってからが本当の地獄だぞ
デフォルトの名無しさん [sage] 2018/09/19(水) 06:01:57.35:S2C8yCMr
おっと野田工房さんの悪口はそこまでだ
ttp://https://qiita.com/nodakoubou/items/1c92d33855cfd09ccc57
デフォルトの名無しさん [] 2018/09/19(水) 06:47:53.78:wCu+CcEF
office.tanakaのコードには俺も前から疑問持ってた。vbaにクソコードが多い原因とまで言っちゃうのはちょっと言過ぎだが。
vbaの場合、入門書にロクなのが無いってのが大きいと思う。
デフォルトの名無しさん [sage] 2018/09/19(水) 08:11:46.01:3pMh17++
少なくともオブジェクトが解放されてないとか文句言ってるのは別言語に移行すれば解決するな
デフォルトの名無しさん [sage] 2018/09/19(水) 08:16:58.74:Q3mSx79m
他人のせいにしちゃいかんな
モダンな文法や機能の導入
Excel.Applicationのインターフェース改善
洗練されたIDEの導入
これらを怠った結果でしょう
特にIDEの影響が大きいと見たね
インテリセンス、サジェスチョン、ワーニング、リファクタリングツールが充実してると大分変わる
デフォルトの名無しさん [sage] 2018/09/19(水) 08:27:16.54:qT/e110f
すくなくともVBEは変えるよな
素人マクロじゃなくて業務開発ならば
デフォルトの名無しさん [sage] 2018/09/19(水) 08:30:56.76:LVCMaoiR

それでもスレに来るのは何なの
デフォルトの名無しさん [sage] 2018/09/19(水) 09:05:12.30:eB9Wvzp/

とにかくVBAをけなして自分のチンケなプライドを満足させたい、その一点のみ w
デフォルトの名無しさん [sage] 2018/09/19(水) 09:07:56.31:hRx0sgGQ
啓蒙してユーザー需要を減らせれば、皆がハッピーになると信じている…のかも
デフォルトの名無しさん [] 2018/09/19(水) 11:59:42.56:9eFLiOtU
暇つぶしの問題
あるセルとその下のセルに数値データが入っている
この2つのセルの中身を他のセルを使わずに入れ替えてください
デフォルトの名無しさん [sage] 2018/09/19(水) 12:11:03.24:3D7E1PKU
○○では××できない!糞!って騒ぎ立てることで
いや○○でもこうすれば××できるんやでという回答を引き出すメソッドや
デフォルトの名無しさん [sage] 2018/09/19(水) 12:13:54.07:3D7E1PKU
なおVBAの場合ほんとにできないのであまり効果的でない模様
デフォルトの名無しさん [sage] 2018/09/19(水) 12:39:07.72:f2RidzcJ

Dim Rng_Target As Range
Dim Val_Target As Long

Set Rng_Target = 目的のセルを取得するexpression
Val_Target = Rng_Target.Value
Rng_Target.Value = Rng_Target.Offset(1, 0).Value
Rng_Target.Offset(1, 0).Value = Val_Target
デフォルトの名無しさん [sage] 2018/09/19(水) 18:17:37.52:r5xYEE0l
If Not RangeA Like RangeB then
RangeA = RangeA Xor RangeB
RangeB = RangeA Xor RangeB
RangeA = RangeA Xor RangeB
End If
デフォルトの名無しさん [sage] 2018/09/19(水) 18:40:15.75:AVetNhWj
xor交換て数値型全部に使えるんだっけ
デフォルトの名無しさん [sage] 2018/09/19(水) 18:41:10.33:5nElZyy0

確認だけど日本語は読めるよね?
VBAの使い道を探してるって書いてあるけど見えなかったのかな
デフォルトの名無しさん [sage] 2018/09/19(水) 18:52:28.00:0/ft7j2l

いや、必要もないのに探す意味がわからないし
暇なの?
デフォルトの名無しさん [sage] 2018/09/19(水) 18:58:31.13:5nElZyy0

ん?
高い金出して買ったExcelを使いこなさなきゃもったいないだろ
デフォルトの名無しさん [sage] 2018/09/19(水) 19:21:40.70:0/ft7j2l

プライベートで有効に活用できないかってことね
趣味にもよるしなあ
デフォルトの名無しさん [] 2018/09/19(水) 23:25:17.18:J1A7PsDE
プロも実はエクセル使えないの悔しいんやなwプロさんのくせにw
デフォルトの名無しさん [] 2018/09/19(水) 23:28:02.58:xLP4ypV2
プロはセルで関数つかっても
vbaはつかわない
デフォルトの名無しさん [sage] 2018/09/19(水) 23:34:32.23:f2RidzcJ
ワークシートでユーザー定義関数使いたいときはVBA使う
デフォルトの名無しさん [sage] 2018/09/19(水) 23:47:39.17:3pMh17++

なんやかんや言いつつ文句の対象がVBAだけなの草
デフォルトの名無しさん [sage] 2018/09/20(木) 00:20:27.12:EYF8wRp8
頭の悪い人がVBA覚えると数式でも工夫すればできることもVBAでやろうとするよね
VBAは所詮「実行できる操作手順」だから、慣れてしまえば頭が弱くても分かりやすい
数式の方が論理的な思考が必要で突き詰めれば難しい
デフォルトの名無しさん [sage] 2018/09/20(木) 00:23:10.21:5+Hsdig+
ハイハイ偉い偉い
デフォルトの名無しさん [sage] 2018/09/20(木) 00:37:45.52:grTR8BoD
まるでVBAで数式を表現できないみたいじゃないか
変なこというヤツだな
デフォルトの名無しさん [] 2018/09/20(木) 00:41:53.76:zLqp8E23
むしろ数式の途中結果を使いながら何列もつかって最終結果にたどりつく
途中で確認するからな
複雑な数式を一行やろうとなんか考えない
デフォルトの名無しさん [sage] 2018/09/20(木) 01:26:44.94:SZObeV+C
語彙力、たぶん関数って書きたかったんだろ
デフォルトの名無しさん [sage] 2018/09/20(木) 01:42:01.91:iN76uuvx
VBの組み込み関数とワークシート関数のどっちの話をしてるんだか
デフォルトの名無しさん [sage] 2018/09/20(木) 05:12:33.95:We2hiCPZ
Visual Basic Editorは20年前に発売されてとっくに引退したVB6のIDEの流用?で
なぜか20年間全く変わらないままだな、もうアホかと

Visual Studioで言うところの「すべての参照の検索」ぐらいできないと不便でしょうがない
デフォルトの名無しさん [sage] 2018/09/20(木) 08:13:11.22:nFH62DW3
そりゃMSにとってはVBAはもはやレガシーもいいとこであり滅ぼしていきたいものだからだ
君の愛する Visual Studio にも昔はExcel VBAと同様にCOMオートメーションによるマクロ機能とその専用開発環境が付属してたけど、いつの間にか消えただろ?
完全に時代遅れの死んだ技術なんだよ
Excel VBAを削除したら大量の自称プロが露頭に迷って電車のダイヤに多大な影響が出るから踏み切れない、
でも車内のポリシー的にレガシー技術への新規投資はできない、というわけで放置するしかないわけ
デフォルトの名無しさん [sage] 2018/09/20(木) 11:47:27.86:lix+OrrW
プロなんてものの数に入らないだろう
圧倒的に多いのは一般のオフィスワーカー
なくなったらむしろプロの側はビジネスチャンスじゃん
デフォルトの名無しさん [] 2018/09/20(木) 12:03:27.50:xZtTWzui
質問です

タブ区切りtxtファイルを複数読み取り,指定の場所に貼り付けるVBAをMacOS上で制作したいのですが,ファイルパスの仕様?などの関係でうまくいきません

どなたかMacOSでのVBAに詳しい方はいらっしゃいませんか?
デフォルトの名無しさん [sage] 2018/09/20(木) 12:07:06.97:liPfzeAw

まずコードを貼れよ。話はそれからだ
デフォルトの名無しさん [] 2018/09/20(木) 12:24:51.29:xZtTWzui

恥ずかしながら,コードはまだ完成していないのです.
そもそも他ファイルの読み込みすらままならないので・・・

練習として,同じフォルダ内にあるEXCELファイル(Sample.xlsx)を開くだけのコードを描いてみたのですが,それすらうまく回りません.
同様のコードでwindowsでは問題なく回ったのですが・・・

Sub Sample()
 Workbook.Open Filename:=ThisWorkbook.Path & "./Sample.xslx"
End Sub

この問題の解決法から教えていただけるとうれしいです.
初心者で右も左も分からず,基本的な質問になってしまい申し訳ありません
デフォルトの名無しさん [sage] 2018/09/20(木) 13:02:40.95:liPfzeAw

ドットが不要。マックは知らんけどWindowsは本来パスはバックスラッシュ、拡張子はxlsxな
デフォルトの名無しさん [sage] 2018/09/20(木) 13:09:09.59:SZObeV+C
今開いているファイルが
/boot/hoge/fuga.xlsm
だとして同じ階層の
/boot/hoge/Sample.xlsx
を開きたいなら
相対指定では../Sample.xlsx
.ではだめ。
デフォルトの名無しさん [sage] 2018/09/20(木) 17:49:38.92:lix+OrrW
グローバルなRangeプロパティへの参照を機械的に検知するアイディア
ttp://https://qiita.com/nukie_53/items/4e9226ac8f747e772afd

なるほどこの発想はなかった
デフォルトの名無しさん [sage] 2018/09/20(木) 18:03:18.90:hYohggeS

むしろプロは喜ぶね
Vbaそのものが目的化してるアマチュアのほうがきついんちゃう?
デフォルトの名無しさん [sage] 2018/09/20(木) 18:30:13.49:5eDdLMhs
VBAが使えるのを売りにしてる事務員は多いからね
さすがにそろそろVBEは標準では付属しなくなって、
MSのサイトの分かりにくい場所から別途ダウンロードが必要になるくらいの弾圧施策は打ってくるんじゃないかな
デフォルトの名無しさん [sage] 2018/09/20(木) 18:36:30.44:49SYfM/r
事務員にそんなもの期待してない
デフォルトの名無しさん [sage] 2018/09/20(木) 19:29:49.01:lix+OrrW
冷静に考えたらプロは喜ばないか
営業が喜ぶかもしれないってだけだな
デフォルトの名無しさん [sage] 2018/09/20(木) 20:28:39.42:qGj9TL9d

2019にPythonが実装されるという噂だが…
結局COMやらないと駄目、ってなったら旨味がほぼゼロ。
Excelが.NETに完全対応するんならVBAとか今すぐ無くなっていい。
デフォルトの名無しさん [sage] 2018/09/20(木) 21:44:20.01:MjJalB6Y

ん?
Excelに搭載するならVBA並みに使えるようにするだろ
COMで使うなら今でも使えるし
デフォルトの名無しさん [sage] 2018/09/20(木) 21:59:37.62:whO82xMw
マルチプラットフォーム、クラウドに注力してるのに
わざわざローカルのOSベッタリの技術にリソースは割きたくないでしょ

というかVBAの前にIEが消えると思う
デフォルトの名無しさん [sage] 2018/09/20(木) 22:42:00.54:oVrOG/N2
IEはガチのオワコンだからしゃーない
デフォルトの名無しさん [sage] 2018/09/20(木) 22:54:11.74:tLKfXY5t

そんな噂はねーよ
とっくの昔に否定されてる
デフォルトの名無しさん [] 2018/09/21(金) 01:31:15.05:MqKbhYRD
ところがここだけの話そうでもないんだよねーあんまり詳しくは言えないけどね
デフォルトの名無しさん [sage] 2018/09/21(金) 02:38:37.17:ITZv+Gmc

負け惜しみ言ってるんじゃねーよ、死ねよ
デフォルトの名無しさん [sage] 2018/09/21(金) 09:35:36.97:mvgA0QsA
どんなのが搭載されても関係無いだろ。
それに合わせるだけだ。
逆に待ち望んでた奴らはまたコレジャ・・・がダメとか言い出すんだろう。

結局今と変わらない。
自分の能力の低さを言語のせいにするような奴らなんだから。
デフォルトの名無しさん [sage] 2018/09/21(金) 16:53:09.50:Qvv9rksr
事務仕事でVBA使えると業務効率すごく良くなるの?
作業自動化とか見て心がわくわくするけど、うちの会社誰もVBA使えなくていまいちどんな感じなのか想像できない
デフォルトの名無しさん [sage] 2018/09/21(金) 17:42:59.81:CSX4ORRK

自分でやってるExcelの仕事を、この部分を自動で出来たらどうなるかって考えてみたらよろしいやん。
出来るところ出来ないところ色々あるだろうけどさ。
デフォルトの名無しさん [] 2018/09/21(金) 17:54:42.09:r3aTV2Xy
まだ始めたばったりで基本もまだまだだけど、実際の業務で自動化できそうな簡単な課題を考えて試行錯誤してるんだけどこんな感じで身につくかな?
デフォルトの名無しさん [sage] 2018/09/21(金) 17:56:20.06:xQShnEjp

今からやるならdotnetやpythonがいいよ
どの言語でもエクセルを処理できる
業務はエクセルだけじゃない
だからどうせなら簡単で色々できてパワフルな別の言語を使ったほうがいいというわけ
デフォルトの名無しさん [sage] 2018/09/21(金) 18:04:23.10:liVyxOie
メモ帳でC#組めるし.NETはオススメだね
デフォルトの名無しさん [sage] 2018/09/21(金) 18:06:59.84:2TZ1ouJm
VBAスレまできてPythonのステマとか
やっぱりPython信者は一味違うな
デフォルトの名無しさん [sage] 2018/09/21(金) 18:11:58.90:mvgA0QsA
dotnetもpythonもExcel上で使うには力不足。
VBAが一番都合が良いんだね。
デフォルトの名無しさん [sage] 2018/09/21(金) 18:16:59.14:xQShnEjp
エクセルはビジネスのごくわずかな領域でしかない
なのでエクセル依存のVBAはビジネスではイマイチなんだね
デフォルトの名無しさん [sage] 2018/09/21(金) 18:29:31.75:liVyxOie
やっぱり.NET、Python、PowerShellで決まりだよ
デフォルトの名無しさん [sage] 2018/09/21(金) 18:33:05.98:MQAmc69g
ユーザー定義ワークシート関数作れるようになってから出直せ
デフォルトの名無しさん [sage] 2018/09/21(金) 18:35:03.52:uQKWYjQl

凄く良くなるかは分からん
業務の種類と自分が出来る自動化のスキルによる
うちはシステム化ダメダメだったから日報を2時間掛けて作ってたらしいそれを2分で出来るようにした
土日も作ってるらしいからそこそこになった
デフォルトの名無しさん [] 2018/09/21(金) 18:40:23.75:Qvv9rksr
なるほどー。普段の業務考えてみたらルーチン作業ばっかしてるし自動化できそう



まさにそんな感じで日報も作ってるわ。部署ごとにわけて〜で2時間は余裕でかかってる
これがもし2分で終わったりしたら夢あるなぁ
デフォルトの名無しさん [sage] 2018/09/21(金) 18:44:00.14:liVyxOie
C#あたり使ってVBEのコードペインにユーザー定義関数用のVB6コードを差し込むようにすれば大丈夫だと思うの
デフォルトの名無しさん [sage] 2018/09/21(金) 18:46:12.21:MQAmc69g

で、そのファイルは他の人が開いたらどうなるんや
デフォルトの名無しさん [sage] 2018/09/21(金) 18:50:57.60:liVyxOie
ブックのコードペインに差し込んでスタンドアロンなVBAプログラムとして保存すれば他のユーザーがそのブックを開いても普通に関数として使えるじゃん
デフォルトの名無しさん [sage] 2018/09/21(金) 18:56:13.68:xQShnEjp

何に使うの?
ユーザー定義関数を定義する事が目的化してない?
デフォルトの名無しさん [sage] 2018/09/21(金) 19:01:09.32:MQAmc69g

標準関数で書くと低速になるような式のとき、VBAに移す事で大幅に高速化できる。
必要になった時にその場で作るものだから、c#の場合VS起動してコンパイルしてとか論外。
その後、計算書完成したから後よろしくって上司に渡すとかよくある
デフォルトの名無しさん [sage] 2018/09/21(金) 19:17:25.97:FvpQrvJK
計算書なんて何度も計算するものじゃないだろ?
それに経過の計算を残すことが重要な書類じゃないのか?

無意味に速度なんて気にして誰も解読できないオナニー関数とか使うなよハゲ
デフォルトの名無しさん [sage] 2018/09/21(金) 19:22:37.61:xQShnEjp
え?それだけ?
定義した関数をデリゲートとして渡してコレクションをソートしたり
メタデータを取得してデコレーターを生成したり
再利用可能なモジュールとしてシステムに登録したり
とかできないの?
使い捨てのシートに表示するのを高速化するだけのために重いエクセルとVBEを開いてVBAで我慢強くコーディングして動作確認とか辛いんですけど
デフォルトの名無しさん [sage] 2018/09/21(金) 19:30:10.67:liVyxOie
必要になったときに手軽に使うのはPowerShell
デフォルトの名無しさん [sage] 2018/09/21(金) 19:31:16.07:MQAmc69g
そういうのが作りたいなら好きにしてくれ。
VBAが適している場面もあるって話や
あと数秒で計算終わるなら必要ない。物によっては諸元入力のたびに再計算に1分かかる場合とかあるんよ。
エクセルエアプには分からなくても仕方がないが。
デフォルトの名無しさん [sage] 2018/09/21(金) 19:35:55.04:FvpQrvJK
どうせSUMPRODUCTとか使いまくって悦に浸ってんだろ
エクセルプロ()さんは凄いですね
デフォルトの名無しさん [sage] 2018/09/21(金) 19:42:04.04:xQShnEjp
リアルタイム更新はエクセル弱っちいよね
非同期処理のサポートが残念だから
入力するたび重い計算を同期で待ちってユーザーが激怒する典型的なパターンだよ
デフォルトの名無しさん [sage] 2018/09/21(金) 19:54:44.02:liVyxOie
大容量データをエクセルで扱うならパワーピボット使おうよって思うし、ワークシートで行列計算の評価を何重にも行うならそれ全部外部の高速なプログラムにオンメモリでやってもらおうよって思うの
デフォルトの名無しさん [sage] 2018/09/21(金) 20:16:40.40:4Tb64i1X

お前、VBAに何やらせようと思ってるの?
VBAはあくまでOfficeアプリケーション上で使える便利機能でしかないんだよ?
お前が言ってることはデカいシステム作ることに対応した言語持ってきて
アレが出来ないコレが出来ないと騒いでいるに過ぎない。

そもそもそういうことをやるならそれなりのフレームワークを使ってEXCEL吐き出させろ。
デフォルトの名無しさん [sage] 2018/09/21(金) 20:23:25.18:+w5W7Qw1

標準の関数ってスピードすごい早いプログラムじゃないの?
自作のほうが上回るとかあるんか
デフォルトの名無しさん [sage] 2018/09/21(金) 20:28:26.36:dSxNadcR

VB6標準の組み込み関数じゃなくてエクセル組み込みの標準的なワークシート関数のことを言ってるんじゃないかと理解してたんだけど違うのか?
デフォルトの名無しさん [sage] 2018/09/21(金) 20:33:56.46:xQShnEjp

デカイシステム?
日常的な規模のツールもC#やパワーシェルのほうがいいよ
小規模ならまあほとんどパワーシェルだな

エクセルはスケールデカイときは論外だけど
便利で基本的なクラスや言語機能がないからスケールの小さいちょっとした物にも実はそんなに向いてないんだな

外部コマンドの出力結果をパースして並び替えてフィルターしてエクセルに出力してファイルをwebサーバーにHTTPポスト
これぐらいの簡単な作業ですら着手に躊躇してしてしまう
デフォルトの名無しさん [sage] 2018/09/21(金) 21:47:31.39:c6u7OXiZ

いやワークシート関数で合ってると思うけどあれを超えられるユーザー定義関数を作る自信はないわ
デフォルトの名無しさん [sage] 2018/09/21(金) 22:47:22.07:oOcVj6Vd
上で言ってるような重い処理じゃないけど、文字列操作系は自作したほうが便利なことが多いよな。

たとえばSplit関数がワークシートに無いのでパスをバラすときとか糞めんどい。
A1:C:\hoge\fugafuga\piyo

C:・・・・・=MID(A1,1,SEARCH("\",A1,1))
hoge・・・=MID(A1,SEARCH("\",A1,1)+1,SEARCH("\",A1,SEARCH("\",A1,1)+1)-SEARCH("\",A1,1)-1)
fugafuga・・・=MID(A1,SEARCH("\",A1,SEARCH("\",A1,1)+1)+1,
SEARCH("\",A1,SEARCH("\",A1,SEARCH("\",A1,1)+1)+1)-SEARCH("\",A1,SEARCH("\",A1,1)+1)-1)

しかしこれを定義するだけでシンプルになる。
Function SPLIT2(v, deli, idx)
SPLIT2 = Split(v, deli)(idx - 1)
End Function

C:・・・・・=SPLIT2(A1,"\",1)
hoge・・・=SPLIT2(A1,"\",2)
fugafuga・・・=SPLIT2(A1,"\",3)

だから文字列変換が出てきたら大抵VBAで関数組むかな
デフォルトの名無しさん [sage] 2018/09/21(金) 22:52:30.61:oOcVj6Vd

書いてから思ったけど、パス分解するだけなら区切り文字で出来るから例が悪かったわ
上の関数は文字を数式で繋いでコネコネするときによく使う
デフォルトの名無しさん [sage] 2018/09/21(金) 22:53:01.55:/N0VzHQb
splitがめんどいのは同意だけどなんでワークシート関数にするの?
vbaで処理完結したほうが良いと思うけど
デフォルトの名無しさん [sage] 2018/09/21(金) 23:05:24.48:oOcVj6Vd

それも場合によるかと
帳票、単票みたいなのをササっと作るときは、セル毎に式を組まないといけないから適してる。
あと行・列挿入が多い表に埋め込むときとか。

たぶんPowerShellerが想像してる表から表に変換するような場合にはあまり適してないね。

あと元の値が頻繁に変化するものは、そのたびにマクロ走らせないといけないから更新漏れが起こるのが困る。
デフォルトの名無しさん [sage] 2018/09/21(金) 23:37:14.57:3Rh/KByq
考え方なんかなワークシートで式使われる方がめんどく感じる
大量にあったりすると重いしメンテしづらかったりするし
デフォルトの名無しさん [sage] 2018/09/21(金) 23:47:44.41:dSxNadcR
Lispの糞コードいじる気分になるよね
デフォルトの名無しさん [sage] 2018/09/21(金) 23:50:48.56:UZbX0jXb
ワークシート関数なら他にはマネ出来ない

データ処理するだけならPowerShell使えって奴も多いんじゃね
デフォルトの名無しさん [] 2018/09/21(金) 23:50:54.80:MqKbhYRD
盛りすぎプロさんw
デフォルトの名無しさん [sage] 2018/09/22(土) 00:01:13.95:96L85sWt
SPLITみたいなのはワークシート関数にする派だな
汎用的な関数をワークシート内で使ったほうが見通しがいい
他にもMAP、FILTER、REDUCEみたいなのも自作して使ってるわ
デフォルトの名無しさん [sage] 2018/09/22(土) 00:04:01.76:/LVptLz+
JSPやASPの失敗を繰り返しとるな
帳票にデータを埋め込みたいなら式じゃなくシンプルにセル参照を使うといいよ
参照先はプレーンなデータ専用シートね
こうしとけばセキュリティ監査的に面倒なマクロ付きにしなくていい、
データ供給元の言語に依存しなくなる、
データ供給元のコードがシンプルになる、
データモデルがわかりやすくなる、などなどメリットが多い
デフォルトの名無しさん [] 2018/09/22(土) 00:17:31.94:T/6XWx9j

MAPやREDUCEに渡す無名関数はどうやってる?
デフォルトの名無しさん [sage] 2018/09/22(土) 02:18:36.18:niETRueG
ワークシート関数って”使う”のにかかる手間が少ないのがメリットだと思う。
関数の入力と出力だけ書いておけばVBA読めない人でもすぐに理解できる。

ワークシート関数使うのは使い捨ての帳票が大半だろうしは全然違うものを想像してそう。
デフォルトの名無しさん [] 2018/09/22(土) 02:24:34.84:FJlDOW+X
お前ら本当にもっと会社の利益になる事を頑張ってくれよ
やらせてるのは女の子がやる様な簡単な仕事なんだからこんなどーでも良い大して役に立たないVBAなんかに時間を使わずに他の人を手伝うとかちゃんと勤務中は仕事してね
分かったね?
デフォルトの名無しさん [sage] 2018/09/22(土) 07:40:51.79:z7BGc1C3
自作のワークシート関数作るとエラー処理とか面倒
特にエクセルの柔軟すぎる型変換は予想しない結果になってしまう


君はまずハローワークに行こうな
デフォルトの名無しさん [] 2018/09/22(土) 08:08:03.84:T/6XWx9j

老害かな
デフォルトの名無しさん [sage] 2018/09/22(土) 09:49:40.55:/LVptLz+

使い捨て帳票ならそれこそ手入力で十分
デザインするついでにデータも入れればいい
プログラムするものは何度も繰り返し出力するもの、何人もの社員が出力するものだ
そういうのは先ほどレスした理由でセル参照を使ったほうがいい
デフォルトの名無しさん [sage] 2018/09/22(土) 09:55:14.40:MP8LoRbH
質問です
パワーシェルって.Net Freamworkの寄生虫みたいなもので
単体だとただのシェルと変わらないって本当です?
デフォルトの名無しさん [sage] 2018/09/22(土) 09:58:32.80:WimPZWqW
VBAがOffice製品の寄生虫なのと一緒
デフォルトの名無しさん [sage] 2018/09/22(土) 11:14:47.29:KDDLtPfl
VBAは個々の重いOfficeアプリを起動しないと動かせないけどPowerShellはIDEでも普通のPSコンソールでもPSだけでサクサク動かせるからそこが違う
デフォルトの名無しさん [sage] 2018/09/22(土) 11:36:15.01:mc091pM3
PowerShell自体がたかがコマンドラインシェルのくせに起動ゲロ遅いから目糞鼻糞
デフォルトの名無しさん [sage] 2018/09/22(土) 11:38:46.45:CkoNNNs2
Cmdプロの人の嫉妬かな
デフォルトの名無しさん [sage] 2018/09/22(土) 11:55:38.81:mc091pM3
使ってるよ?
最近はだいたいbashで済ませてるけど
デフォルトの名無しさん [sage] 2018/09/22(土) 21:13:08.35:+NSfHsNE
質問です。
ソルバー 機能をvbaで使ってるんだけど、目的や制約をセルを対象じゃなく、vba内の変数に対して適用したいんだけど不可能?
デフォルトの名無しさん [sage] 2018/09/22(土) 22:34:22.71:96L85sWt

クッソダサいしなんちゃってmapだけど文字列で渡してる
=MAP(A1:A10,”$$*EXP($$)”)
みたいな感じで
デフォルトの名無しさん [sage] 2018/09/22(土) 23:03:40.40:iO7YjT3j
「=SUM(A1:A10)」のようにSUM関数の引数に計算範囲をして合計値を表示したあとで
その計算範囲のセルの値を書き換えた場合に合計値が更新されないことがあるのですがなぜでしょうか?
そのあと値を書き換えたセルでF2を押して入力状態にし、そのままエンターを押すとようやく合計値が更新されます。
デフォルトの名無しさん [sage] 2018/09/22(土) 23:53:28.61:niETRueG

自動再計算が手動になっているのでは?
デフォルトの名無しさん [] 2018/09/23(日) 13:25:57.01:6+b91Fhf

是非使いたいから公開してよ
デフォルトの名無しさん [sage] 2018/09/23(日) 15:33:34.28:aZjrg24v

似たようなことやってる。
ユーザー定義関数じゃないけど昔のAPIビューアをドッカブルにした奴をVB.netで作って使ってる。
デフォルトの名無しさん [sage] 2018/09/23(日) 15:35:54.14:aZjrg24v

ただ、ワークシート関数は重くなる場合もあるし自分は敬遠する傾向だな。

でも一長一短でワークシート関数の方が良い場合も当然ある。
デフォルトの名無しさん [sage] 2018/09/23(日) 15:38:28.44:aZjrg24v

バカ丸出しだなあ。
あのね、それで使う側にとって何が良くなるの?
そこを語るべきだろ。

それが納得できるような話が今まで殆ど語られたことがない。
デフォルトの名無しさん [sage] 2018/09/23(日) 15:47:46.09:aZjrg24v

何度言っても分からない人だねえ。
エクセルのファイル作るだけなら何使っても良い。
別にVBAが有利なことも無い。

逆にファイル開いた状態から動かす時は1ファイルで済むVBAが有利だろう。
だからVBAの話題になってるこのスレなんかもメインはそういうVBA有利な場面の話なんだよ。

実際、VBA不利な場面なんていくらでも知ってるけど、不思議とアンチの言葉とは丸っきり被らない。
アンチの言葉は全く説得力がない。
被れば、こっちも「確かに」となる筈なんだけどね。
デフォルトの名無しさん [sage] 2018/09/23(日) 16:04:30.67:xERBcwZj
まーた1ファイル論争になってるのか、もう神学論争だよねこれ
VBA以外の言語でもCOMオブジェクトとしてアクティブなブックを操作できるわけだし、想定ユーザーのスキルレベルや運用条件や処理の内容によってVBAを使うべきか使わなくても良いかの判断なんて変わってくるでしょ
デフォルトの名無しさん [sage] 2018/09/23(日) 16:04:32.08:9e4CRvDY
大将、ドーナッツ一丁!
デフォルトの名無しさん [sage] 2018/09/23(日) 16:30:52.15:H5quPExp
自分の場合はそもそもエクセルを開いた状態で動かしたいプログラムというのがあまり無いです
VBAを普段使いしているひとはどういう用途・目的でエクセルを開いた状態でマクロを使っているのでしょうか?
デフォルトの名無しさん [] 2018/09/23(日) 16:46:09.55:yOUnCcQA
つまりVBAなんて必要ないって事だよね
そんなクソ言語を覚える意味ないもんな
デフォルトの名無しさん [sage] 2018/09/23(日) 16:49:36.19:aZjrg24v

だから、それはそもそも何の言語でも良い話だろ。
VBAのスレなんだからVBA有利な話になるのが当たり前なんだよ。
だから1ファイルの話になるのが当然なの。

何で当たり前のことも出来ない話をしなきゃならんのかって話。
デフォルトの名無しさん [sage] 2018/09/23(日) 16:54:56.19:aZjrg24v

それはそもそもVBAである必要の無い話だろうに。
何でこのスレに来てるんだということになる。

こっちは殆どブック開いた状態が基本だよ。
だから最初から噛み合わない。

CSVなら分かるけどExcelのブックは開いて人の判断なりを使って何かするのが基本。
じゃなかったらそもそも人間が理解出来る表である必要もなく、単なるバイナリのデータで良いわけだ。
デフォルトの名無しさん [sage] 2018/09/23(日) 16:59:47.48:xERBcwZj
落ち着こうや、常にVBAが有利なわけじゃないよねって言っただけだぞ
デフォルトの名無しさん [sage] 2018/09/23(日) 17:00:28.44:9e4CRvDY
みんながみんなそういう狭い世界で生きてるわけじゃない
キミのエクセルに対する姿勢はそうだってだけで
他の人は閉じた状態でもエクセルを扱う、
複数のファイルを扱う、エクセル以外との連携もする
その前提は崩しちゃいかんと思うのよ
デフォルトの名無しさん [] 2018/09/23(日) 17:04:15.89:0vXeudiz
みんながエクセル使えないわけやないんやでw
デフォルトの名無しさん [] 2018/09/23(日) 17:06:10.83:bxERXRN+
だからさー、、、、話し相手が居ない淋しいプログラマの皆さんは、プログラ「ム」板のExcel VBAスレはなく
上にあるプログラマー板のどっかそういうスレで話し相手探せっつーの

それすら判らんようになってんのかいな。
ここで思いっきりマウンティングしたいというか、ここでないとマウンティング出来ないのは判るけどさー
デフォルトの名無しさん [sage] 2018/09/23(日) 17:08:31.58:xERBcwZj
このスレに来る目的とかVBAに対して取るべき態度とかそんなの人の勝手じゃんよ
デフォルトの名無しさん [sage] 2018/09/23(日) 17:11:49.59:aZjrg24v

違うっちゅうの。
閉じた状態でブック触るならそもそも何の言語でも良いし、というよりむしろVBAは不利なんじゃないの?
じゃあ、何でVBAのスレが有るかと言えばそれは開いた状態で何かする話をしたいからだろ。
そりゃ、VBAだってある程度は汎用的に使えるから閉じた状態からVBAでどうにかする話題が有っても良いけどメインじゃないでしょ。
デフォルトの名無しさん [sage] 2018/09/23(日) 17:15:40.69:xERBcwZj
C#とかでCOM経由でエクセル触る前提だけどエクセルのオブジェクトモデルについてだけ質問したいと思った人がこっちに来る可能性だって十分あるんだよなぁ
デフォルトの名無しさん [] 2018/09/23(日) 17:16:23.42:0vXeudiz
ガキかいなw
そもそもvbaがいらない場面でvba使おうとして、あげくの果てにvbaが有利やないとか
訳わからん事言いだすプロさんがおると質問が収束せんねんw
端的に言って迷惑やねんプロさんw
おまえの事やでw
デフォルトの名無しさん [] 2018/09/23(日) 17:50:56.48:icVHbGJq
自演で荒らすのはよくないよPyキチ君
デフォルトの名無しさん [] 2018/09/23(日) 18:06:38.73:cRG95Xcq
vbaとrubyはイロイロと空気がにてる
ゴミっぷりも似てる
デフォルトの名無しさん [] 2018/09/23(日) 18:07:15.36:cRG95Xcq
エクセルは優秀な表計算ソフトウェア
コレは間違いない

しかしエクセルのオマケ機能のvbaはウンコ
コレは間違いない
デフォルトの名無しさん [sage] 2018/09/23(日) 18:09:15.69:H5quPExp

すいませんあなたが何を言いたいのかよくわかりません
ブックを開いた状態から起動するマクロで有用な具体例はなにかありませんか?
抽象的な答えでごまかそうとしてませんか?
デフォルトの名無しさん [sage] 2018/09/23(日) 18:31:08.96:RgL9otrm
ハンカクでまた別人アピールしてるの?
いい加減に板を荒らすのは止めな
デフォルトの名無しさん [sage] 2018/09/24(月) 00:45:26.83:LqyRy1HC
ちょっと質問です。
とあるコードで
If 条件1 Then
MsgBox "メッセージ1"
End
ElseIf 条件2 Then
MsgBox "メッセージ2"
End
Else
End If
という記述を見たんですけど、Ifの中でEnd使うことってあるんですか?
やってる内容は
If 条件1 Then
MsgBox "メッセージ1"
End If
If 条件2 Then
MsgBox "メッセージ2"
End If
と同じなのかなと思ったんですけど、ご存知の方御教示頂ければ幸いです。
デフォルトの名無しさん [sage] 2018/09/24(月) 00:51:36.52:cyCxPH/A

Endのことはさておき、そのふたつのコードの意味は異なるよ
デフォルトの名無しさん [sage] 2018/09/24(月) 01:02:46.39:LqyRy1HC

本来意味が異なるのは分かるんですが、処理内容がそんな感じだったのでEndにはそういった意味があるのかな?と思って質問した次第です。
デフォルトの名無しさん [sage] 2018/09/24(月) 01:54:26.03:GrunNCaI

全く意味が違う。END使ったらプログラムが強制終了されてしまう。絶対に使うべきではない。
Sub main1()
Call sub1(True, True)
MsgBox "main終了"
End Sub
Sub sub1(条件1 As Boolean, 条件2 As Boolean)
If 条件1 Then
MsgBox "メッセージ1"
End
ElseIf 条件2 Then
MsgBox "メッセージ2"
End
Else

End If
End Sub
'結果:メッセージ1しか出ない

Sub main2()
Call sub2(True, True)
MsgBox "main2終了"
End Sub
Sub sub2(条件1 As Boolean, 条件2 As Boolean)
If 条件1 Then
MsgBox "メッセージ1"
End If
If 条件2 Then
MsgBox "メッセージ2"
End If
End Sub
'結果:メッセージ1、メッセージ2、main終了
デフォルトの名無しさん [sage] 2018/09/24(月) 03:08:18.87:3gV95ADu
Exit Sub とか Exit Function とかと違って、呼び出し元のプロシージャに返ることもなく一切のプログラムがそこで終了するコードってことだ。
Ifの中でEndを使うことがあるのかと訊かれれば、文法上は問題ないが俺だったら使わん。
もっとも、「早く返す」や「早く終了する」を追い求めたその人なりの結果かもしれんので、見かけたとしても内容次第で、問題のあるコードでなければとやかくは言わない。
デフォルトの名無しさん [sage] 2018/09/24(月) 05:43:58.48:sHYzq55w

Endステートメントを使うと、単にコードの実行が止まるだけでなくアプリケーションで保持していた全ての変数の値がリセットされ、アプリケーションに対する外部プロセスからの参照も遮断される

モードレス表示でフォームを表示している場合、値管理やカスタム常駐クラス使用のためにグローバル変数を使っている場合等には問題が生じるので本当に要注意
デフォルトの名無しさん [sage] 2018/09/24(月) 07:37:11.59:E4VB1fuR
状況わからんからなんとも言えんが致命的なエラー時に強制終了させるぐらいしかないと思う
のコードは微妙にそう言うコード片な感じもするし
デフォルトの名無しさん [sage] 2018/09/24(月) 09:12:46.29:ALTh+r7C

多分エラーメッセージの後、後続処理をやりたくないのでendって書いたんだろう
exit subで抜けても呼び元に帰って続行するから
デフォルトの名無しさん [sage] 2018/09/24(月) 09:24:57.98:LqyRy1HC
皆さまありがとうございます。
ちゃんと読んでみたら終了するコードでした…お恥ずかしい…
今後質問する際は頭をリフレッシュさせて読み直してからに致します。
ご迷惑をお掛けしました。ありがとうございました!
デフォルトの名無しさん [sage] 2018/09/24(月) 09:47:07.47:ltYXr3cK
psやらrubyやら喚き叫ぶバカよりは良い w
デフォルトの名無しさん [sage] 2018/09/24(月) 10:16:18.94:Z99vN/yN

ところで

If 条件1 Then
 ・・・
ElseIf 条件2 Then
 ・・・
End If



If 条件1 Then
 ・・・
End If
If 条件2 Then
 ・・・
End If

では意味が違ってくるのはわかってますか?
デフォルトの名無しさん [sage] 2018/09/24(月) 10:25:02.72:oCpujaFY
周回遅れなアホ質問要らん
デフォルトの名無しさん [sage] 2018/09/24(月) 10:26:57.24:Z99vN/yN

いや、のレスを見ると不安になるだろ
デフォルトの名無しさん [sage] 2018/09/24(月) 10:34:31.82:LqyRy1HC

ほんと何処に目をつけていたのか自分でも分からなくてお恥ずかしい限りですがElseの意味は分かっています。申し訳ないです…
デフォルトの名無しさん [sage] 2018/09/24(月) 12:24:14.30:0AspGVrS

訊かれてるのは ElseIf の意味だぞ
デフォルトの名無しさん [sage] 2018/09/24(月) 12:47:03.05:3gV95ADu
質問(した方が逆に質問される)スレ
デフォルトの名無しさん [] 2018/09/24(月) 16:16:37.08:Z99vN/yN
ttp://https://qiita.com/Q11Q/items/b525330d043e2a775594
いつもながら薄気味悪い
誰に語りかけてるんだよ?
デフォルトの名無しさん [sage] 2018/09/24(月) 16:35:59.07:e4NBE4Fp

そもそもの考え方が違うから思い付かないんだろう。
例えば日付毎の生産量を表す表とグラフが有ったとする。
表示する期間を指定することでグラフ表示が変化するプログラムが有ったとしよう。

何でそんな機能が必要かといえば、表とグラフをにらめっこして、1週間後のグラフはどうだろうという要望や判断が有るからだ。

こんな例すら思い付かないんだから知識や技術が有ってもダメプログラマーなんだろうな。
デフォルトの名無しさん [] 2018/09/24(月) 18:01:08.47:qkXKwQlD
荒らし本人が言ってもな
デフォルトの名無しさん [sage] 2018/09/24(月) 18:02:07.29:NcXWYl5J

webってそういうもんだよ
知らないの?何十年前の人間なの?
デフォルトの名無しさん [sage] 2018/09/24(月) 18:06:57.12:In5MTxMl
そんなのPowerShellかRubyで十分
デフォルトの名無しさん [] 2018/09/24(月) 18:20:22.67:Z99vN/yN

qiita VBAタグの劣化は許しがたい
そうは思わないか?
デフォルトの名無しさん [sage] 2018/09/24(月) 18:28:34.71:sPlVwsRd

どの言語でも簡単にできる上にそういうツールって今はいくらでもあるんでVBAでやる理由としてはちょっち弱いですね
これはエクセル開いた状態のVBAじゃないと絶対無理だっていう事例を知りたいです
デフォルトの名無しさん [] 2018/09/24(月) 18:32:02.32:qkXKwQlD

頭大丈夫か?
デフォルトの名無しさん [sage] 2018/09/24(月) 18:44:10.41:e4NBE4Fp

バーカ。
何でブックで保存するんだ?
そのファイルは結局どうするんだ?

Excelで開くんだよ。
何の為にそんなことするんだ?
業務では開いた上で人間が何らかの判断をする為だ。
そうじゃ無かったらExcelは必要ないし、人間が開く必要も無いし、ファイルもバイナリで良い筈なんだ。

開いた上で動作するものばかりである必要は無いが開いた上で作業するのが基本なんだからプログラムも開いた上で動作するのがメインなのは当たり前だろう。
デフォルトの名無しさん [sage] 2018/09/24(月) 18:47:21.59:sPlVwsRd

意味不明ですね
エクセルを開いたままVBAを使うことのメリットを納得させる決定的な具体例はまだですか?
デフォルトの名無しさん [sage] 2018/09/24(月) 18:48:07.49:e4NBE4Fp

お前の主張はExcelである必要も無い場合も含んでる。
というかその割合も多いだろう。
だからお前がここに来てるのもまったくおかしい。

絶対に無理とか
デフォルトの名無しさん [sage] 2018/09/24(月) 18:50:03.06:e4NBE4Fp
絶対に無理とかいい出したら、PC使わないと絶対無理な事例自体無くなってくるぞ。

紙とエンピツでOKという話になる。
デフォルトの名無しさん [sage] 2018/09/24(月) 18:51:22.73:e4NBE4Fp

開いて作業するのが基本。
わざわざ開かずに作業する方がおかしい。
デフォルトの名無しさん [sage] 2018/09/24(月) 18:52:11.10:sPlVwsRd
主張が支離滅裂で理解できません

エクセルを開いたままVBAを使うメリットを納得させる決定的な事例を聞いてるのですが
そのような事例は存在しないのですか?
デフォルトの名無しさん [sage] 2018/09/24(月) 18:52:40.76:e4NBE4Fp

意味不明なのはお前。
開いて作業できること自体メリットだよ。
デフォルトの名無しさん [sage] 2018/09/24(月) 18:53:11.09:e4NBE4Fp

既に説明済みだが。
デフォルトの名無しさん [sage] 2018/09/24(月) 18:54:30.36:sPlVwsRd

そのメリットを納得させる決定的な事例を聞いてるのですが
そのような事例は存在しないのですか?
デフォルトの名無しさん [sage] 2018/09/24(月) 18:55:55.65:e4NBE4Fp
そもそも最初から支離滅裂なのはお前じゃないか。

じゃあ、お前はどうしても絶対にVBAではいけない事例をあげられるのか?
そもそもVBAを否定する奴の主張の方が絶対どころかほとんど大した理由になってないものばかりじゃねーか。
デフォルトの名無しさん [sage] 2018/09/24(月) 18:56:13.26:e4NBE4Fp

既に説明済み。
デフォルトの名無しさん [sage] 2018/09/24(月) 18:57:30.40:e4NBE4Fp

結局、お前の主張を要約すると「VBAは嫌い」というだけだ。
デフォルトの名無しさん [sage] 2018/09/24(月) 19:00:43.65:NcXWYl5J

思わない
エクセル以外の処理をvbaで色々やるのが間違ってるんだよ

C#にでもまとめて、コマンドプロンプトで処理すればいい
もう文字コードだのお節介機能で自動変換だの疲れた

ってか、”1-1-1”を普通に取り込めないとかもうウンコofウンコすぎてしんどい
デフォルトの名無しさん [sage] 2018/09/24(月) 19:01:15.42:sPlVwsRd

いけないということはないですが楽で効果的な手法があるなら常識的に考えてそちらを使うのが自然ですよね
あえて非効率な方法を選ぶならそれなりの理由が有るはずです
その理由とそれを納得させるような事例を知りたいのです
ただ単にその事例に興味があります
デフォルトの名無しさん [sage] 2018/09/24(月) 19:05:58.04:e4NBE4Fp

自然w
頭の悪さが滲み出てるわw
よくそんなこっぱずかしいことが言えるな。

Excelのブックは開いた状態で作業するのが「自然」なんだからお前の主張に則ればVBAが一番有利という結論だな。
デフォルトの名無しさん [sage] 2018/09/24(月) 19:08:11.84:e4NBE4Fp
自然などと書けばこういう突っ込みが来ることも想像出来ないんだから話にならない。
デフォルトの名無しさん [sage] 2018/09/24(月) 19:09:15.54:sPlVwsRd

エクセルを開いたままVBAを使うことが他の言語やツールと比べてメリットがあると納得させる事例は存在しないのですか?
デフォルトの名無しさん [sage] 2018/09/24(月) 19:11:39.15:GrunNCaI

使うのに必要なスキルが極めて少ない
デフォルトの名無しさん [sage] 2018/09/24(月) 19:16:37.23:sPlVwsRd
答え無しですが時間がもったいないのでこの辺りで切り上げましょうか
デフォルトの名無しさん [sage] 2018/09/24(月) 19:19:46.76:e4NBE4Fp
人には絶対を求める癖に自分は自然ですます。
いったい、どういう頭の構造になってるんだろう。
デフォルトの名無しさん [sage] 2018/09/24(月) 19:54:15.09:Z99vN/yN
そもそも俺はVBAの言語仕様がなかなか良いと思ってるんだが
そういう前提に立つ人間は少ないのかな?
デフォルトの名無しさん [sage] 2018/09/24(月) 20:14:30.52:Go3cawEH

ジョークとか皮肉で言ってる?
ちょっとよくわからないんだけど
デフォルトの名無しさん [sage] 2018/09/24(月) 20:14:49.56:8Eg6qm1l
20年間COBOLとPL/Iをメインでやってきた人が、「VBAは良い。生産性がとても優れている。」と言っていた
まあ人それぞれということだ
デフォルトの名無しさん [sage] 2018/09/24(月) 20:15:16.80:Z99vN/yN
デフォルトの名無しさん [sage] 2018/09/24(月) 20:16:36.26:Z99vN/yN

なぜ皮肉だと?
「とても良い」とまでは言わないが、そこそこ良い言語仕様じゃないか。
そう思う人間も多いだろう。
デフォルトの名無しさん [sage] 2018/09/24(月) 20:18:56.67:E4VB1fuR

言語仕様は基本VB6なので当時としてはよくできてた
でもさすがに20年も経つと色々見劣りするところが出てくるわけで
デフォルトの名無しさん [sage] 2018/09/24(月) 20:25:47.99:3gV95ADu

気にしてもハゲるだけなんじゃねーの


閉じた業務系でVBAと肉入り以外の選択肢を潰されてやむを得ずVBA触った俺みたいな変人もいるし、
まぁその手の固定観念でもあるか、あるいは構ってちゃんなだけじゃねーの
デフォルトの名無しさん [sage] 2018/09/24(月) 20:27:32.35:Z99vN/yN

それはもちろんそうだが、それによって致命的に使いにくくなっているわけじゃないしな。
なんか上の方の議論が「使いにくい言語をあえて使う理由は何なの?」みたいなノリで、
言語として使いにくいことが前提みたいになってる点が気になった。
「VBAは十分使いやすい言語だ」という前提を下ろすつもりのない人間もいるわけで。
デフォルトの名無しさん [sage] 2018/09/24(月) 20:27:41.54:vr3+WUA5
「良い」にも色々あるからな
まともなプログラミングの基礎のない低スキルな人間が、新しいことを一切学ばずとも20年間仕事できてるわけで、これはすごいことだよ
デフォルトの名無しさん [] 2018/09/24(月) 20:28:51.56:5zI+X6hO

当時からガチ勢と比べれば見劣りすることだらけだったわw何知ったかしとんねんプロさんwwww
デフォルトの名無しさん [sage] 2018/09/24(月) 20:48:27.78:E4VB1fuR

使い易さなんて他の言語との相対的なもの
他の言語の便利機能知ってしまったらあの機能もないのか…とかこの機能があれば…ってなるのはしょうがない


はいはい w
デフォルトの名無しさん [] 2018/09/24(月) 20:54:52.18:5zI+X6hO

うむ、バカはしゃべらん方がよろしいw
デフォルトの名無しさん [sage] 2018/09/24(月) 21:28:35.65:Hov49HPU
くだらない言い合いでスレ伸びまくりで草
デフォルトの名無しさん [sage] 2018/09/24(月) 21:48:48.21:GrunNCaI
エクセルVBAは(ユーザーの)エクセルの操作を支援する場面において無類の力を発揮する。
しかしちょっと込み入った処理をしようとすると近代的な言語で書きたくなることは確かにある。

そこで質問です。
エクセル上でボタンを押す
→VBAでイベントを受ける
→外部プログラムにSelectionを渡す
→Selection(Range)を元に処理を実行
→処理結果を二次元配列データでVBAで受け取る
→VBAでデータを加工する。
→ワークシートにデータを書き出す。
尚、本エクセルは共有フォルダ上において複数名が交代で使用する。

こういったことがしたい場合何で書いたらいい?C#?PowerShell?

既存のVBAも活かしたいので、全部C#とかに一新しろっていう回答は無しでお願い。
デフォルトの名無しさん [sage] 2018/09/24(月) 21:53:45.14:QDf0aD0O
VSTOでアドオンだな
VBA資産とかいうゴミは捨ててC#で一新しよう
デフォルトの名無しさん [sage] 2018/09/24(月) 21:56:06.10:NcXWYl5J

csvか何かに吐き出せばどんな言語でも処理できるっしょ
ってかその程度ならvbaで頑張るわ
デフォルトの名無しさん [sage] 2018/09/24(月) 22:02:20.31:Z99vN/yN

> →Selection(Range)を元に処理を実行
> →処理結果を二次元配列データでVBAで受け取る

この2点からしてVBAで完結する案件
最初からRange→配列にして処理すればいいからね
デフォルトの名無しさん [sage] 2018/09/24(月) 22:19:41.01:GrunNCaI
,381
シンプルに書きすぎた。
たとえばSelectionの中身がファイルのパスで、そのファイルが複雑なデータ形式(たとえばAutoCAD dwg)を外部プログラムで解読したいとする。
(VBAのクラス関連の機能がショボすぎて無理だったので、前にC#で書いたものがある)
これをVBAから呼び出して使いたいってこと。

諸事情によりエクセルブックと同じフォルダにps1なりdllを置く必要があって、これを呼び出せると助かる。
デフォルトの名無しさん [sage] 2018/09/24(月) 22:24:01.34:Z99vN/yN

じゃあSelectionとか関係なくファイルパスを引数にするDLLを書いてVBAから呼び出せばいいじゃん。
VBA側では
ByVal path As String
デフォルトの名無しさん [sage] 2018/09/24(月) 22:34:16.30:Z99vN/yN

まあCだと諸般の事情から文字列を渡す場合でも
ByVal path As Stringじゃなくて
ByRef path As Varian ってインタフェースがいいわけですが
C#だと知らん
デフォルトの名無しさん [sage] 2018/09/24(月) 22:44:58.17:sPlVwsRd

VBA->C#(COM)->PowerShell->(PS, C#, CMD, VBS, etc.)
デフォルトの名無しさん [sage] 2018/09/24(月) 23:06:47.65:GrunNCaI
,384,385
同じフォルダのDLLを呼ぶように出来るの?
COM使うとしたらregasmが必要になるらしいけど・・・
ネットワーク共有フォルダ上のは設定出来ないのでは?
あ、遅延バインディングで出来るんだろうか
デフォルトの名無しさん [sage] 2018/09/24(月) 23:17:50.47:Z99vN/yN

自作DLLをVBAから呼ぶっていう単純な話だよね?
別にどんなフォルダにあろうと関係ないけど。
あとSelectionそのものじゃなくて配列化したデータを渡すんだったらCOMなんていらなくて
WIN32APIだけでできる。
デフォルトの名無しさん [sage] 2018/09/24(月) 23:30:05.56:3gV95ADu
要はCADデータからメタ情報を抽出して、できればExcel形式で一覧化したい系の?
デフォルトの名無しさん [sage] 2018/09/24(月) 23:46:24.03:GrunNCaI

そうだね。.NET系のDLLの関数を使いたい系。
COM登録せずに呼び出す方法あるのか。
参考URLとかもらえないだろうか。


メタ情報じゃないかなー図形情報の位置関係から特定の情報だけリストアップしてる。
まぁ例だからこれに限った話じゃないのだけど、VBAで書き直すのは無理ゲーすぎる。
388 [sage] 2018/09/25(火) 01:06:10.25:s1AsV/RM

確かにそれだと自作DLLぐらいしか解決策なさそうだな。
んで、C#で書いた.NET系のDLLの関数をRegAsm使わないで呼び出したいと・・・悪いけど正直やったことない。
が、DLLをEXCEL.EXEと同じ所に置けるなら↓の方法が使えるかもしれない。
ttp://http://www.ka-net.org/blog/?p=6198
全然見当違いだったら申し訳ないが。
デフォルトの名無しさん [sage] 2018/09/25(火) 18:07:06.26:HENVIdME
フォームにオプションボタン1,2,3、リストボックス1,2,3を設置
オプションボタン2にチェックがあるとき、リストボックス2表示、リストボックス1,3は非表示
という具合に、オプションボタンにチェックがあるときに対応するリストボックスを表示、それ以外を非表示にしたいです

Private Sub UserForm_Activate()
If OptionButton1.Value = True Then
ListBox1.Visible = True
ListBox2.Visible = False
ListBox3.Visible = False

ElseIf OptionButton2.Value = True Then
ListBox1.Visible = False
ListBox2.Visible = True
ListBox3.Visible = False

ElseIf OptionButton3.Value = True Then
省略
end if

と書いてみたのですが、リストボックスの表示、非表示をコントロールできません
どうすればいいでしょうか
デフォルトの名無しさん [sage] 2018/09/25(火) 18:25:16.89:Rh4u2+TF

プロフェッショナルなら可能
デフォルトの名無しさん [sage] 2018/09/25(火) 18:35:56.01:quZOCI3i

オプションボタンのクリックイベントに書かないと動かなくて当然
デフォルトの名無しさん [sage] 2018/09/25(火) 19:09:20.22:5hhJfzHj

まず、そのDLLはCOMなのか、通常の呼び出し用なのか、.NET用なのか

COMなら参照設定なりCreateObjectなりで
通常のDLLならDeclare Function(SUB)で呼び出せば良いだけ

.NETのDLLは.NET以外から呼び出すのは難しいので、素直にCOM公開する方が楽


まあその相手方(たとえばAutoCAD?)がCOM公開してくれるのが一番楽だろうけど
デフォルトの名無しさん [sage] 2018/09/25(火) 19:09:27.10:HENVIdME

あーそうでした!お恥ずかしい
ありがとうございました
デフォルトの名無しさん [] 2018/09/25(火) 19:15:41.25:SdejvHFK
すみません、切実に助けて頂きたいです。
現在、VBAからoracle12cにado接続してデータアップデートを行う処理を作成しています。
ですが、更新はうまく行くのですが、なぜか処理件数がどうしても0になってしまいます。
何時間も色んなサイトを参考にしたり、したのですが、ダメで…
色々なサイトにあるソースをコピペして接続先やテーブル名のみ変えて貼ったりもしてみましたが、実行するとやはり更新はされるのに処理件数が取得できません。
もう自分ではどうすることも出来ず、どなたか助けて下さい…お願いいたします。
デフォルトの名無しさん [sage] 2018/09/25(火) 20:31:14.47:ObO6oAGo

どうやって取ろうとしている?
デフォルトの名無しさん [sage] 2018/09/25(火) 20:41:07.98:/T1GixS7

当然、これを見てlong型の第2引数を指定した…ってのは勿論やったんだよね?
ttp://https://msdn.microsoft.com/ja-jp/library/cc364125.aspx
デフォルトの名無しさん [] 2018/09/26(水) 00:30:33.04:17jq3B2z
WinScard API使ってリーダーに設置したカードのIDmをセルに入力させたいのですが、うまく機能しません。
サンプルコードがありましたらご教示願います。
デフォルトの名無しさん [sage] 2018/09/26(水) 01:13:21.41:6OKvzXmf
>>396
プロパイダ(ドライバ)によってはレコード件数返さん奴があったはず
一回プロパイダ変えて試してみ

最悪は更新と同じ条件のselect投げて件数取得してから更新かけれ
396 [] 2018/09/26(水) 09:21:14.19:rrNz/9UY
397、396
コマンドオブジェクトから、以下のようにしてやっていました。
com.execute(re)
comはADODB.COMMANDで、updete文を設定してあり、更新自体はうまくいきます。
reはlong型の変数です。
マニュアルのとおり、コネクションでexecuteもやってみたのですが、結果は返らず…

400
Microsoft ACTIVEX data objects 6.1を使ってみているのですが、ほかのバージョンにしてもダメでした…
ADO接続を使用する上で、必要な参照が上記以外にあるのでしょうか…


皆さんすみません、ほんとうに素人丸出しで申し訳ございません…
デフォルトの名無しさん [] 2018/09/26(水) 16:42:22.74:JgSk1Rg0
VBAの勉強をしようと思うのですが、まず何から始めればいいですか?教えてください。
デフォルトの名無しさん [sage] 2018/09/26(水) 17:05:59.73:cCj/GZBP
まず服を脱ぎます。
デフォルトの名無しさん [sage] 2018/09/26(水) 18:16:51.93:Dt06YZ+t

まずやりたい事を考えるといい。

最初は既存の関数の真似するプログラムでも書いて基本的な書き方を覚えるとかオススメ。
関数使えばチェックできるし。

慣れてきたら、百ます計算を作るでもいいし、ナンプレを作るでもいい。日常的にエクセルでやってる操作があるなら自動化してみるでもいい。

そのために必要なことはググれば全部出てくる。
デフォルトの名無しさん [sage] 2018/09/26(水) 18:45:15.00:OGb2Ur6B
以下二点留意すればあとはググりながら独学で大丈夫かと思います

・普通に日英両方でググっても出てこなかったら他のモダンな言語の出番だと察する癖をつける
・bufとかSub Sample1()とかobjFsoといった特徴的な表記をサンプルコードで多用しているサイトは悪いコードの見本市なので極力真似ないように今から気を付ける
デフォルトの名無しさん [] 2018/09/26(水) 19:12:00.05:+un+mAjX
そしておもむろに肛門にこびりついトレペかすを掃除します。
デフォルトの名無しさん [sage] 2018/09/26(水) 19:12:58.42:SfBrsqof

12cならOracle.ManagedDataAccessがオススメ
デフォルトの名無しさん [] 2018/09/26(水) 21:33:09.71:JgSk1Rg0

いきなり参考書から始めないほうがいいってネットに書いてありましたけど、本当ですか?
デフォルトの名無しさん [] 2018/09/26(水) 22:45:53.91:+un+mAjX
ネットに書いてある事を素人が真似ると最悪直腸が破裂する危険もあります。
初心者が浣腸プレイに挑戦する時は必ず上級者に直接教えてもらうようにしまちょう。
デフォルトの名無しさん [sage] 2018/09/26(水) 23:16:47.85:4uP8tILz

それ、面白いと思って書いたの?
デフォルトの名無しさん [] 2018/09/26(水) 23:17:53.84:+un+mAjX

面白いと思ったの?w
デフォルトの名無しさん [sage] 2018/09/26(水) 23:33:31.70:4uP8tILz

いや、微塵も
笑わせるつもりがないのなら何で書いたのかなと思って
デフォルトの名無しさん [] 2018/09/26(水) 23:35:48.77:+un+mAjX

じゃなんで面白いと思ったの?って書いたの?w
デフォルトの名無しさん [sage] 2018/09/26(水) 23:48:40.23:4uP8tILz

滑ってるようにしか見えなかったから
デフォルトの名無しさん [] 2018/09/27(木) 08:01:55.54:99b9Jx0M

結局おまえが盛大にスベっとるやんw恥をしれw
デフォルトの名無しさん [sage] 2018/09/27(木) 08:16:20.10:zQmuEMQe

画面で一行ごとの動きを見ながら勉強した方が解説読むより理解しやすい。タイピングする時間も解説を読む時間も無駄。
デフォルトの名無しさん [sage] 2018/09/27(木) 12:17:06.67:UAsp+BRN

まず入門書かって読めばいいんじゃね
デフォルトの名無しさん [sage] 2018/09/27(木) 12:26:33.91:UAsp+BRN
勉強のやり方をを勉強しないと勉強できないとか
デフォルトの名無しさん [] 2018/09/27(木) 21:40:20.96:hL85+V3Z
ttps://i.imgur.com/69DoZWN.jpg

どうしても必要で困っています

どなたか詳しい方がいらっしゃったら作成をお願いします。
デフォルトの名無しさん [sage] 2018/09/27(木) 21:48:20.24:qqpzpvHf

SUMIFSで出来ると思うよ。
VBA使うにしてもSUMIFSを使うのが効率の良いやり方だと思う。
デフォルトの名無しさん [sage] 2018/09/27(木) 21:54:42.81:MgIWwOWH

サンプルデータあげてくれれば作るよ
そのファイルの上から30行くれ

まぁやることは
JAN & 有効期限 & ロット番号の作業列作ってピボットに突っ込むだけだけどな
デフォルトの名無しさん [] 2018/09/27(木) 21:55:15.47:hL85+V3Z

ありがとうございます。
ググってその関数を見つけたのですが、どう記述したら実現出来るのかが分からなくて…
デフォルトの名無しさん [] 2018/09/27(木) 21:56:35.93:hL85+V3Z


サンプルデータってどこにどうやってアップロードすればいいですか??
デフォルトの名無しさん [] 2018/09/27(木) 22:10:56.58:pq96CSzd
普通にデータソースをそのブックのシートにして
SQL書けばきっと簡単にできる

VBAなんか不要
デフォルトの名無しさん [sage] 2018/09/27(木) 22:19:36.54:MgIWwOWH

ttp://http://fast-uploader.com/
「ファイルを選択」
「アップロード開始」

これが出来ないなら流石に何もしない
デフォルトの名無しさん [] 2018/09/27(木) 22:21:31.13:hL85+V3Z


ttp://http://fast-uploader.com/file/7093610017708/
デフォルトの名無しさん [] 2018/09/27(木) 22:22:48.42:hL85+V3Z


ありがとうございます。
426のコメントでアップロードしています。
ご確認ください(^-^)
デフォルトの名無しさん [] 2018/09/27(木) 22:30:26.82:pq96CSzd
ttps://i.imgur.com/g0LaQIP.png
sheet1

ttps://i.imgur.com/CswmAtc.png
sheet2
※ sheet2にsheet1の結果を抽出

↓この抽出結果
SELECT min(`Sheet1$`.aho) , sum(`Sheet1$`.baka) , min(`Sheet1$`.じゃま)
FROM `himistu\baka.xlsx`.`Sheet1$` `Sheet1$`
group by `Sheet1$`.aho
デフォルトの名無しさん [] 2018/09/27(木) 22:48:24.69:pq96CSzd
ttp://http://fast-uploader.com/file/7093611609249/
完成
デフォルトの名無しさん [sage] 2018/09/27(木) 22:54:14.35:MgIWwOWH

間違ってない?
ユーロジンが一つになっている
デフォルトの名無しさん [] 2018/09/27(木) 23:00:45.54:hL85+V3Z

早速の作成ありがとうございます。

私の伝え方が不十分だったかも知れませんが、430のコメントの通りです。

お時間があれば修正していただけると助かります。
デフォルトの名無しさん [] 2018/09/27(木) 23:03:47.01:pq96CSzd
ttp://http://fast-uploader.com/file/7093612560800/
よしなおした
デフォルトの名無しさん [] 2018/09/27(木) 23:06:15.22:hL85+V3Z

ありがとうございます。
ちなみに、新たにデータを作成するのですが、そのデータに対して処理するにはどのようにすればよいですか??
デフォルトの名無しさん [sage] 2018/09/27(木) 23:09:53.34:MgIWwOWH
あら負けた
ttp://http://fast-uploader.com/file/7093612906901/

ピボットで表みたいにするやり方がわからんかったわ
デフォルトの名無しさん [] 2018/09/27(木) 23:14:28.37:pq96CSzd
↓セパゾン錠2を100個追加
ttps://i.imgur.com/PgDSjOe.png

↓[データ]タブ→[すべて更新]押下
ttps://i.imgur.com/mSvw0XM.png
セパゾン錠2が155個になってる

カンペキ
デフォルトの名無しさん [sage] 2018/09/27(木) 23:23:57.47:MgIWwOWH

この集計、どうやって作ったか教えて下さい!
テーブル作る所までしかわかりませんでした
デフォルトの名無しさん [] 2018/09/27(木) 23:43:17.54:pq96CSzd
新規に作成したい場合

[データ]タブ → [その他のデータソース] → [Microsoft Query]
 ↓
Excel Files
 ↓
このファイル
 ↓
Sheet1$ > → 次へ → 次へ → 次へ → 。。。クエリの編集を行う → 完了
 ↓
SQL
 ↓

SELECT `Sheet1$`.YJコード, Sum(`Sheet1$`.前月末在庫数), Min(`Sheet1$`.前月末評価単価), Min(`Sheet1$`.薬品名), Min(`Sheet1$`.単位名), Min(`Sheet1$`.薬価), Min(`Sheet1$`.通常仕入れ先コード),
Min(`Sheet1$`.発注点), Min(`Sheet1$`.JANコード), Min(`Sheet1$`.棚番1), Min(`Sheet1$`.棚番2), Min(`Sheet1$`.枝番), Min(`Sheet1$`.包装名称), `Sheet1$`.有効期限, `Sheet1$`.ロット番号
FROM `ひみつ\サンプルデータ.xlsx`.`Sheet1$` `Sheet1$`
GROUP BY `Sheet1$`.YJコード, `Sheet1$`.有効期限, `Sheet1$`.ロット番号

 ↓

[ファイル] → Microsoft Office Excelにデータを返す

コレでイケル
一件落着
デフォルトの名無しさん [sage] 2018/09/27(木) 23:56:33.07:MgIWwOWH

ありがとー!
デフォルトの名無しさん [sage] 2018/09/27(木) 23:57:51.93:MgIWwOWH
エクセルって自分自身をソースにしてSQL発行なんてできたのか・・・
凄すぎて泣けてきた。もっと早く知りたかったな
デフォルトの名無しさん [] 2018/09/28(金) 00:15:50.74:h9+2U6ZR

作成を依頼したものです。
まだ詳しく確認できていませんが、色々とスピーディーに対応していただきありがとうございます。
デフォルトの名無しさん [sage] 2018/09/28(金) 04:54:48.92:7Dx3JKmZ
よくこんな馬鹿を相手にするな
デフォルトの名無しさん [sage] 2018/09/28(金) 07:18:03.33:3N0zeARs
以上、無能の自己紹介でした
デフォルトの名無しさん [] 2018/09/28(金) 09:03:04.35:zkBwEOAZ
なんちゃってマップはどうなった
デフォルトの名無しさん [sage] 2018/09/28(金) 18:29:54.42:AnMtzl3w

悔しいか、屑
デフォルトの名無しさん [sage] 2018/09/28(金) 19:43:53.67:3N0zeARs

おっ!
天才様の登場だ〜〜〜www
デフォルトの名無しさん [] 2018/09/28(金) 21:17:46.20:k5h2WtG4
やっぱりな
この板で役に立つレスは
オレしかしてない
デフォルトの名無しさん [sage] 2018/09/28(金) 21:26:48.63:mtesGZvP
天才様ドーナツ作って
デフォルトの名無しさん [sage] 2018/09/28(金) 23:16:32.45:AJk9wJBe

でもお前、VBAしか出来ないじゃん
デフォルトの名無しさん [] 2018/09/29(土) 16:35:28.06:V4hAUMop

Excel2010じゃ動かないんですかね
デフォルトの名無しさん [] 2018/09/29(土) 17:27:14.21:IuTgmxg/
1. サンプルデータ.xlsxをダウソ(
2. aho.dqyをダウソ(ttp://http://fast-uploader.com/file/7093764952195/
3. aho.dqyをテキストエディタで開く
4. aho.dqyの【ひみつ】をサンプルデータ.xlsxがあるディレクトリフルパスに置換
5. aho.dqyをダブルクリック

コレでイケル
バカでもチョンでもイケル

はExcel2010がダメなワケじゃない
知能が著しく低いヤツには動くようにはできない
デフォルトの名無しさん [sage] 2018/09/29(土) 20:04:17.86:m1u3SrFL
だが気をつけて欲しい
Jet 4.0 は64bit版には対応していない
デフォルトの名無しさん [sage] 2018/09/29(土) 20:04:56.48:UGjn5ihf
久々に覗いたらなんじゃこりゃ・・・質問した人、理解できてるのか? これ。
まぁ理解できるならSQLでもいいだろうけどさ。


開業医んとこか薬局んとこか分からないけど・・・まぁその、お疲れ様。
とりあえず分からないようなら他の解決策もあるのでその旨言ってね。
デフォルトの名無しさん [sage] 2018/09/29(土) 20:12:30.98:UGjn5ihf

ついでに。

>元の在庫管理データっぽいの
数値であった方が良い部分が文字列として入力されてる。問題なければそのままで良いけど。
それより、有効期限とロットNo.が空欄の薬剤があるけど大丈夫? たぶんデータの取り出し方の問題か何かだと思うけど。

>SQL
作ってくれた人には申し訳ないけど、JANコードじゃなくてYJコードで集計しちゃってるので一応注意。
まぁどっちでも大して変わらないんだけど。
デフォルトの名無しさん [] 2018/09/29(土) 23:48:20.58:IuTgmxg/
aho.dqyの抽出問合せを修正すれば(@〜Bの箇所を修正)すぐに修正できる

(修正前)

SELECT aho.YJコード, @
  Sum(aho.前月末在庫数),
  Min(aho.前月末評価単価),
  Min(aho.薬品名),
  Min(aho.単位名),
  Min(aho.薬価),
  Min(aho.通常仕入れ先コード),
  Min(aho.発注点),
  Min(aho.JANコード), A
  Min(aho.棚番1),
  Min(aho.棚番2),
  Min(aho.枝番),
  Min(aho.包装名称),
  aho.有効期限,
  aho.ロット番号
FROM
  `【ひみつ】\サンプルデータ.xlsx`.`Sheet1$` aho
GROUP BY
  aho.YJコード, B
  aho.有効期限,
  aho.ロット番号
デフォルトの名無しさん [] 2018/09/29(土) 23:50:30.45:IuTgmxg/
 
(修正後)

SELECT Min(aho.YJコード), @
  Sum(aho.前月末在庫数),
  Min(aho.前月末評価単価),
  Min(aho.薬品名),
  Min(aho.単位名),
  Min(aho.薬価),
  Min(aho.通常仕入れ先コード),
  Min(aho.発注点),
  aho.JANコード, A
  Min(aho.棚番1),
  Min(aho.棚番2),
  Min(aho.枝番),
  Min(aho.包装名称),
  aho.有効期限,
  aho.ロット番号
FROM
  `【ひみつ】\サンプルデータ.xlsx`.`Sheet1$` aho
GROUP BY
  aho.JANコード, B
  aho.有効期限,
  aho.ロット番号


この修正で、どう集計されてるか理解できるハズ
デフォルトの名無しさん [sage] 2018/09/30(日) 00:00:43.46:TbDeVj+o
自分には理解できていても質問者が理解できているかは別
デフォルトの名無しさん [sage] 2018/09/30(日) 00:03:38.45:ItvcYfS7
>452
内容的にドラッグストアだと思う
ってか俺がドラッグストア勤務
デフォルトの名無しさん [sage] 2018/09/30(日) 14:48:48.37:I0OjYnSY

Jetの後継でACE.OLEDBってのがある
64ビット版もある

問題は、32ビット版と64ビット版の共存ができないが
デフォルトの名無しさん [sage] 2018/09/30(日) 17:57:31.99:3+iEwgWt
作成依頼のVBAです。どなたかお願いします。
フィルタオプションを使ったVBAなのですが、上手い方法がないものか・・。

用意するシート
「総合商品情報」、「抽出条件」、「denpyou」「date」「tantou」「kata」「kazu」の7つを用意

総合商品情報のA1に「伝票No.」、B1に「日付」、C1に「担当」、D1に「型番」、E1に「数量」と記載され、
そして各項の2行目以降にデータが延々と羅列されている。

そこから特定の条件の情報を抽出したい。
条件はシート「抽出条件」にある。
シート「抽出条件」のA1〜E1は各項目の名前があり、
A2〜E2の条件で抽出したい。

A1=「伝票No.」 A2=「1001」
B1=「日付」 B2=「2018/1/1」
C1=「担当」 C2=「山田」
D1=「型番」 D2=「A-001」
E1=「数量」 E2=「1」

抽出条件が伝票No.「1001」で抽出したデータはシート「denpyou」のA1に抽出
日付「2018/1/1」で抽出したデータはシート「date」のA1に抽出
担当「山田」で抽出したデータはシート「tantou」のA1に抽出
型番「A-001」で抽出したデータはシート「kata」のA1に抽出
数量「1」で抽出したデータはシート「kazu」のA1に抽出する。

ただし、抽出条件に記載があっても、総合商品情報には記載がない場合もある。
(※例えば、抽出条件「山田」が総合商品情報のC列にはないとか)
その場合はエラーを無視して、他のシートの抽出を実行して欲しい。

※分かりにくい説明かもしれませんが、よろしくお願いします。
デフォルトの名無しさん [sage] 2018/09/30(日) 18:03:15.18:FLQTI8+6
SQL発行すれば何とかなると思う
デフォルトの名無しさん [sage] 2018/09/30(日) 18:16:07.23:hh5CI8rl
VBAなんか使わなくても普通にVLOOKUPで一瞬でできるな
デフォルトの名無しさん [sage] 2018/09/30(日) 23:25:01.00:BlMeh26g
それ、作ってもらったとして、自分でメンテできます?
デフォルトの名無しさん [sage] 2018/09/30(日) 23:39:46.62:ItvcYfS7
vlookupと作業列でいいんじゃねって思ってしまう
デフォルトの名無しさん [] 2018/09/30(日) 23:40:53.09:aYXyCrkn
ああ
オレなら余裕でサクッとできるわあ

キミラ低能にコレできる?

VLOOKUPでは行は1行しかとれない
少なくともコレではできない
デフォルトの名無しさん [sage] 2018/09/30(日) 23:47:05.68:ItvcYfS7

ttp://http://fast-uploader.com/file/7093874344745/
こんな漢字でしょ
テキトーに作ったけど多分もんだいはないと思う
デフォルトの名無しさん [sage] 2018/09/30(日) 23:49:34.63:ItvcYfS7

自己紹介好きだねぇ
君はエクセル覚えたての中学生かなんかだと思うけど、もう少し頑張れ

これぐらいなら見た瞬間に完成図が思い浮かぶよ
vbaにするまでも無い
デフォルトの名無しさん [] 2018/09/30(日) 23:56:56.43:aYXyCrkn
でた、vbaしかできない低学歴知恵遅れITドカタふがいきってる
デフォルトの名無しさん [] 2018/10/01(月) 00:00:41.84:zfKNS/F/
で、低学歴知恵遅れは
どこにVLOOKUP使ったの?

ん? いってみ?
デフォルトの名無しさん [sage] 2018/10/01(月) 06:39:47.60:MCBRDKcK

本気で言ってるのか?
デフォルトの名無しさん [sage] 2018/10/01(月) 07:49:25.42:u6gUPL8M
sortについての質問です
レコードがあって、並び替えの基準列が例えば
0
4
1
0
5
となってたとします。これを
0
0
4
1
5
に並び替えたいのです。要は特定の値とそれ以外に分離させたいんです。
現状は行の下からループを回して、特定の値ではないならば行をカットして一番下に挿入するというコードなのですが遅いです。
なにかいい方法はないでしょうか
デフォルトの名無しさん [sage] 2018/10/01(月) 08:05:44.31:K7Kh8NR/

すべて配列に突っ込んで、配列上で並べかえてから書き換え
デフォルトの名無しさん [sage] 2018/10/01(月) 08:06:55.02:PpuAKpxM

=A1=0
の列を追加してソート
デフォルトの名無しさん [sage] 2018/10/01(月) 08:13:41.55:IH0VbElQ

うーん
VLOOKUP使えと言ってる人がいるけど
VLOOKUPは複数行に同じデータが存在したとき
最初の一つ目を取得して来るんで
キー項目が無いと厳しいんじゃね?
デフォルトの名無しさん [sage] 2018/10/01(月) 08:25:33.53:iFb8zFFH
countifと組み合せればできるよ
もそうだけど、このスレ見てるとすぐVBA使いたがる人ってちょっと頭が残念なだけなのかなと思っちゃうね
デフォルトの名無しさん [sage] 2018/10/01(月) 09:15:58.47:oBEcQ0XA
そらVBAの質問スレやしな。エクセル標準機能でもいいならエクセル質問板いくやろ
デフォルトの名無しさん [sage] 2018/10/01(月) 10:03:52.20:H4/VTF+j
質問する方はね。
回答する方はVBAでやるべきかどうかと考えないのか。
デフォルトの名無しさん [sage] 2018/10/01(月) 10:46:30.51:bOC85JQ9

その発想は無かった……
なるほどbooleanに変換してしまえばいいんですね。ありがとうございました。
デフォルトの名無しさん [sage] 2018/10/01(月) 11:36:11.29:oBEcQ0XA

質問する方は関数で出来るのを承知でVBAの答えを求めていると考えてVBAでしか答えないというスタンスもある。別に関数や操作で出来ることを教えてあげる点については異論はない。そういう答え方をしたい人がそう伝えればいい
デフォルトの名無しさん [sage] 2018/10/01(月) 17:34:28.00:x1tycYY6
マクロってむかし使ったとき選択セルを基準に動いてた気がしたんだけど
今のパソコンでは違う場所で使おうとしても記憶した場所でしか動かなくなったけど
デフォルトの名無しさん [sage] 2018/10/01(月) 17:40:54.99:x1tycYY6
(選択セルでショートカットキーを押すとセルの中心にチェックボックスを作るようにしたいんだけど
(長いプログラムは無しで)
デフォルトの名無しさん [sage] 2018/10/01(月) 19:04:58.48:Rpti6CxP
初心者だけど、仕事でどうしても必要で試行錯誤中なのだが…

例えばなんだけど
@IEを起動して指摘のURLに飛ぶ→A管理者ユーザーでログイン→
Bユーザー情報検索のページに飛ぶ→Cプルダウンでユーザーの種別を選択→
Dユーザー名をフォームに転記→E検索ボタン押す→Fユーザーデータが表の形式で表示され、ある行をラジオボタンがあるので選択→
G決定ボタン押す→Hページ内のリンクをクリック→Iページ内のリンクをクリック→
J表示された文字列をコピーしてエクセルに出力
なんてことできるの?

説明がわかりにくくて申し訳ない。
@からBまではできたんだが…Cからができるか不安だ。
どうにかBを応用して繋げていけばできるんじゃないかと思っているのだが、これをユーザー分取得するという繰り返しをするとなると、全くイメージ出来ない。
自分でもイメージ出来ていないのに聞くのも難だが、流石に実現不可能かな?
デフォルトの名無しさん [sage] 2018/10/01(月) 19:07:07.36:cKKUS3dy

出来る出来ないの返答を求めているようなのでそれだけ答えると「出来る」
デフォルトの名無しさん [sage] 2018/10/01(月) 19:14:45.76:+ysO9sf2

あえてvbaとieを使う理由はないけどまあ出来るよ
デフォルトの名無しさん [sage] 2018/10/01(月) 19:14:53.78:DnKjEw0R
Aのフォームの操作ができてるならあとは全部Aの繰り返しだからもう少し頑張れ
デフォルトの名無しさん [sage] 2018/10/01(月) 19:24:39.53:d7lQtBIe



ありがとうございます!
出来ると聞いて安心しました。頑張って作ってみます。
デフォルトの名無しさん [sage] 2018/10/01(月) 19:25:25.93:d7lQtBIe

vbaとieに拘りはないですが、導入が簡単そうだったので…
デフォルトの名無しさん [sage] 2018/10/01(月) 19:26:16.86:Zp0cocQA
質問者じゃないけど2とか3とかはどうやってやるの
デフォルトの名無しさん [sage] 2018/10/01(月) 19:33:41.96:d7lQtBIe

申し訳ない。Aは自動ログイン設定というか、IEの機能でidとpassをオートフィルしてくれる機能あるから、わざわざログイン情報を入力せずに、そのまま決定ボタンをクリックするようなコマンド?を記載したよ。
Bはその文字に埋め込まれたリンクを、htmlで探して指定した。
Aが苦労したな…javascript:loginとかいうので、どうやったら良いのかわからなかったけど、その頭にあるinputがページで何番目なのか数えて、4番目だったから4番目のinputをクリックしてね!って文を書いたら移動できた!
デフォルトの名無しさん [sage] 2018/10/01(月) 19:45:57.55:MCBRDKcK

に答え書いてるよ


vbaでフォームは置けない気がする
?の文字を置くなどで対処はできないか
デフォルトの名無しさん [sage] 2018/10/01(月) 19:47:37.81:MCBRDKcK

相当しんどいと思う
chromeの拡張機能を使ってみては?
「クローム 拡張機能 マクロ」で検索すると出てくる

後はjsごと覚えた方が良さそう
デフォルトの名無しさん [sage] 2018/10/01(月) 20:52:16.85:lLn/Vvr8
RPA使えよ
仕事なら買ってもらえるだろ
デフォルトの名無しさん [sage] 2018/10/01(月) 21:35:57.95:d7lQtBIe

robo-pat?
あるがライセンス切れてて使えない…ライセンス到着待ちなんだ。
でツールが明日必要になってしまったから、仕方なくvbaで…と。
デフォルトの名無しさん [sage] 2018/10/01(月) 21:36:29.14:d7lQtBIe

iMacrosってやつ?試しに使ってみようと思う!
デフォルトの名無しさん [] 2018/10/01(月) 23:54:06.64:zfKNS/F/
vlookupなんか
どこにも見当たらない

オツムだけじゃなくて目も悪いの?
デフォルトの名無しさん [sage] 2018/10/02(火) 02:04:29.98:/QfTYNRi

Seleniumデザインパターン&ベストプラクティス、2015、オライリー

この本は、Ruby で、Selenium WebDriver を使って、ウェブサイトを自動テストする本だけど、
まさにこういう事を、Rubyでプログラミングする

どのページ(URL)へ飛んで、入力フォームに入力して認証して、
買う商品を選んで、カートに入れて、決済する

まさに、Ruby・Selenium WebDriver が定番

簡単なものなら、iMacros, Selenium IDE で出来るかも
デフォルトの名無しさん [sage] 2018/10/02(火) 05:27:11.42:uy7vLCLd

普通におけるけど。
デフォルトの名無しさん [sage] 2018/10/02(火) 06:36:08.43:tR2WmwNe

rubyとselenium webdriverか。こちらも試してみます!ありがとうございます。
495 [sage] 2018/10/02(火) 07:13:32.60:/QfTYNRi
結局、ウェブページの自動テストツールを数年やってきた人たちは、次の2つにたどり着く

プログラマーは、Ruby で、Selenium WebDriver、
非プログラマーは、iMacros, Selenium IDE

漏れなんて、自分のPC 内の画像フォルダの画像でさえ、
Ruby・Selenium WebDriverでプログラミングして、ブラウザで見てる

HTML のimg タグに、画像のパスを設定して、ブラウザに表示させている
デフォルトの名無しさん [sage] 2018/10/02(火) 07:17:00.46:3rK24ppg

たどりつかねーよwww
エロ本は画像ビューワ使ったほうがサクサク動いて良い
デフォルトの名無しさん [] 2018/10/02(火) 07:21:20.23:XHPfCFYq
またマッチポンプに引っかかってるのか?
頭悪すぎだろ
デフォルトの名無しさん [sage] 2018/10/02(火) 07:23:48.60:3rK24ppg
いや、タダのボケだろ
ちょっとおもしろかったわ
デフォルトの名無しさん [sage] 2018/10/02(火) 07:39:42.84:N1aQvONc
頭が悪いのを誤魔化そうとしても意味なくね?
デフォルトの名無しさん [sage] 2018/10/02(火) 07:42:08.16:ahHfhE5m

ttp://https://jizilog.com/vba-checkboxop
これをショートカットキーに割り付けるだけで行けそう
495 [sage] 2018/10/02(火) 09:00:24.92:/QfTYNRi
Seleniumデザインパターン&ベストプラクティス、2015、オライリー

この本の著者がこう言ってる

最初は、ウェブページの自動テストを、Selenium IDE でやっていたけど、
大量の自動テストをこなすために、Ruby・Selenium WebDriver でプログラミングするようになった

これは、誰もがたどる道
デフォルトの名無しさん [sage] 2018/10/02(火) 09:10:32.38:fUFII8R1
別にVBAでも簡単だけどな。
既にVBAでRPAもどきを作ってある。
デフォルトの名無しさん [] 2018/10/02(火) 09:35:53.30:IHboiu3Y
マッチポンプに掛かった間抜けがいるスレはここですか?
デフォルトの名無しさん [sage] 2018/10/02(火) 10:09:51.02:IdpLKWF1
SikuliXおすすめ
適当なスクレイピングでよくてHTML解析する情熱が無くなった場合に使ってる
デフォルトの名無しさん [] 2018/10/02(火) 12:19:33.62:gUUCeKXU

> HTML のimg タグに、画像のパスを設定して、ブラウザに表示させている
プロさんて20年前からタイムスリップして来たんかなw
デフォルトの名無しさん [sage] 2018/10/02(火) 12:33:06.04:1IC/OUbd
Selenium全く必要ないっていう
デフォルトの名無しさん [sage] 2018/10/02(火) 17:44:52.64:rk1+4NE+

技術的負債
デフォルトの名無しさん [sage] 2018/10/02(火) 18:18:59.44:giBEQZ0B
どうせ誰にもメンテできないんだから問題ない
返済されることのない借金は負債ではない
デフォルトの名無しさん [sage] 2018/10/02(火) 18:53:37.03:rk1+4NE+
技術的負債はSIerに押し付ければいいのよ
事務員は保守性など気にせずクソでも動けばいいのでとにかく作る
プログラマを企業間のパワー差を活かして発給で雇いこき使ってメンテさせる
これがVBAerの正しいあり方だ
デフォルトの名無しさん [sage] 2018/10/02(火) 19:07:53.02:qyY5wEk7

そうか
まぁ頑張れよ

さて、忘年会用に何かでビンゴのソフトでも作るか
デフォルトの名無しさん [sage] 2018/10/02(火) 19:32:27.30:V/qNOCI+
バリアント型変数にrangeを代入すると処理時間短縮になるというが、今いち実感が湧かない。

INPUTのテキストファイルの中身次第で出力するセル範囲が変わるんだが、
想定される最大のセル範囲をrangeに代入するよりは、セルひとつひとつにアクセスして最小限の範囲で出力したほうが処理時間早いんじゃないか…
デフォルトの名無しさん [sage] 2018/10/02(火) 19:33:46.34:JlZ/oy05
VBAでシステム組んでる企業は今はほとんどないのでは?
個人がちょっとしたマクロを書くぐらい
デフォルトの名無しさん [] 2018/10/02(火) 19:48:52.17:eaArETqj
ニートのプロさんは少しお口にチャックねw
デフォルトの名無しさん [sage] 2018/10/02(火) 19:56:57.36:VwRcsjE4
です。
レスくれた方ありがとうございます。
さん、作成ありがとうございます。
ダウンロードしてみたのですが、私の自宅のPCだとなぜか文字化けして画面に表示されません・・。
明日、会社のPCでやってみるべきか・・。
どなたか親切な方がいたら、画面をコピーしてくれると助かります。
デフォルトの名無しさん [sage] 2018/10/02(火) 20:18:38.93:JlZ/oy05
セキュリティ意識に欠けるね
マクロが禁止されるわけだ
デフォルトの名無しさん [sage] 2018/10/02(火) 20:34:11.46:t6BWNYue

出力に必要な行列の数だけ要素数を指定して適切なサイズの配列を使うようにすればいいじゃん

複数セル値の逐次更新は更新するセルの個数分だけプロパティ関数が実行されてイベント処理が走るので、同じセル数を更新する場合で比較すると配列による一括処理と比べて格段に重いよ
デフォルトの名無しさん [sage] 2018/10/02(火) 21:04:30.03:GLlKH6rT

返答ありがとう。

INPUTのデータ次第で1行〜9999行目まで出力されるので、現状9999行までのセルを配列に格納している。

ちょいと処理時間を計測してみたんだが
出力件数によっては、
例えば200件程度だったときの場合、セルに都度アクセスしたほうが早かったのよね。

実行する度に、INPUTのデータ量次第で配列に格納する範囲が変えられると便利なのだが、それがわからないため9999行まで格納してるって感じかな
デフォルトの名無しさん [] 2018/10/02(火) 21:09:51.81:R8M7QKDK
ttp://http://fast-uploader.com/file/7094037561899/
バカが作ったのはまったく使い物にならないから
オレのを使いなさい

ダウソした
総合商品情報.xlsx

c:\tmp
に入れればとりあえず動く

保存する場所やファイル名変えたならSQLに入ってるパス変更すれば
とりあえず動く
デフォルトの名無しさん [] 2018/10/02(火) 22:36:58.97:ZVIK4UcY
PCから投稿したのが繁栄してないかもしれないので…

↓↓↓↓

社内のデータ加工で困っています。
VBAじゃないかもしれないのですが、
賢い方々助けてください。

やりたいことや実際のデータは下記URLにUPしています。

よろしくお願いします!

ttp://http://fast-uploader.com/file/7094034688478/

用意できる環境に書いてある「Microsoft Office 2016」は「Excel」を意味しています。
デフォルトの名無しさん [sage] 2018/10/02(火) 22:50:57.49:t6BWNYue

INPUTがどのような形でコードに渡されるか分からないが、例えばテキストデータを読み込んでいるなら、行数をeofになるまで数えて変数に代入して、その変数で配列要素数を指定すれば簡単だと思う
デフォルトの名無しさん [sage] 2018/10/02(火) 23:02:37.82:uetVBQBr

3回以上セルにアクセスするなら確実に配列に取り込んだほうが早い。
体感出来ないのはコードが完全に最適化出来てないだけ。
あと数式の埋め込まれたセルがあったりするとあり得ないくらい遅くなる。
(ある程度はスイッチで解消できるけど)

あとInputはめちゃくちゃ遅いよ。
バイナリモードで開いて一括読み込みがオススメ。
ttp://http://tetsucom.blogspot.com/2011/03/vba_9799.html

このサイトでは数倍しか差がついてないけど、元データの行数が増えるほどInputと差が開く
デフォルトの名無しさん [sage] 2018/10/02(火) 23:48:15.72:VE+AbZ0A

アップロードしたファイルに店名が含まれているんだが大丈夫か・・・
デフォルトの名無しさん [sage] 2018/10/02(火) 23:53:53.97:GLlKH6rT
皆さん助言ありがとう。

処理のイメージとしては、1行ずつ読み込んで色々判定した後、1行ずつ出力していく感じです。

頂いた助言を試してみて、
事前にeofまでのループ処理で変数をカウントアップさせて、必要な行数を配列に格納させることはできました。

バイナリモードの件と合わせて、パフォーマンスの向上を目指しますm(_ _)m
デフォルトの名無しさん [sage] 2018/10/02(火) 23:57:35.54:VE+AbZ0A

Rangeオブジェクトへのアクセス回数を減らすよう意識すると、案外パフォーマンスが上がったりする。
あとオブジェクトの特定のプロパティ・メソッドがやたら遅かったりすることもあるから注意。
デフォルトの名無しさん [] 2018/10/03(水) 00:52:56.81:Ijm6Q0Hp

気がつきませんでしたが、ダミーデータなので大丈夫です
デフォルトの名無しさん [sage] 2018/10/03(水) 12:30:49.51:Ju5BAQ2L

1行ずつ出力じゃあまり恩恵無いかもしれないけどまとまって出力すれば劇的な変化がある。

Dim i As Long
Dim j As Long
Dim varRng() As Variant
Dim t As Single

t = Timer
For i = 1 To 50000
For j = 1 To 50
Cells( i, j ).Value = i + j
Next j
Next i
Debug.Print Timer - t

t = Timer
Redim varRng( 1 To 50000, 1 To 50 ) As Variant
For i = 1 To 50000
For j = 1 To 50
varRng( i, j )= i + j
Next j
Next i
Range(A1:AX50000).Value = varRng
Debug.Print Timer - t
デフォルトの名無しさん [] 2018/10/03(水) 16:42:01.11:uB4nYmn5
実践的に練習用の課題を解いていけて、段階的にスキルアップできるサイトないですか?
デフォルトの名無しさん [] 2018/10/03(水) 21:13:21.04:4mO7hAaA
Range(1,1).Value = 1-1
これをやると、1月1日にExcelが日付と解釈して変換する。
これを防ぐにはどうしたらいいですか。

文字列として格納するために""で囲むという手があるがそれをやりたくない。
理由は値(1-1)に加工していじってるから。

ちなみに、1-1は番地のつもりです。
デフォルトの名無しさん [sage] 2018/10/03(水) 21:37:41.99:B0/YTPvH

書式を明示的に文字列にしてからやってみたら?
.NumberFormatLocal = "@"
デフォルトの名無しさん [sage] 2018/10/03(水) 21:58:23.71:siQNEaWd

その式だと1-1で0が格納される訳だが?
セルに文字列として格納させるなら532の方法か、先頭にシングルクォーテーションを付与
デフォルトの名無しさん [sage] 2018/10/03(水) 22:24:31.18:IRo5OOwi
1件だけなら 「Range(1, 1) = "'1-1"」でもいいかもしれんが、沢山あるようなら配列を使って一発代入するかな。
デフォルトの名無しさん [sage] 2018/10/03(水) 22:37:26.98:cOBWyVpF
です。
さんありがとうございます。
文字化けしない環境で試してみたら、画面は見えました。
ですが、肝心のコードが見当たらない・・・orz
シートに記載されてる情報を見る限り、恐らくさんのが一番私が求めているものに近いかな、と思いました。
さん、ダウンロードしてもコードが見えないので、
このスレにコードをコピーしてもらえないでしょうか?
デフォルトの名無しさん [] 2018/10/03(水) 23:48:07.24:FigU8Mbj
Cells(Rows.Count, 1).End(xlUp).Row
これだとhiddenで隠れている行は無視されてしまいます
あくまでも最後に入力されている行を取得したい場合はどうすればいい?

もちろんhiddenを一時的に表示にする以外方法で
隠れていてもデータ行として扱う方法
デフォルトの名無しさん [] 2018/10/03(水) 23:54:17.02:7gIy/TEB
↓ココに操作手順がおいた
ttp://http://fast-uploader.com/file/7094133678468/

[SQLの編集]タブに編集の仕方が載ってる(denpyouを例にしてるが、編集の仕方は他も同じ)
※ vbaじゃないからな、コードはない
※ ちなみにデータとデータの抽出結果を出力するブックは別でも問題ない

新規に自分で作成したい場合は
← コレ
を参考にしなさい
デフォルトの名無しさん [sage] 2018/10/04(木) 00:51:18.54:FEHQanR0
半角先生口は悪いけど割と優しいからすき
デフォルトの名無しさん [sage] 2018/10/04(木) 00:55:39.43:X6BA3+Oo
VBAの実行環境をDockerizeする方法を教えてください
デフォルトの名無しさん [sage] 2018/10/04(木) 07:43:14.54:tsjyo4iv

used range使えば?最終行取得でググれ
デフォルトの名無しさん [sage] 2018/10/04(木) 09:11:12.18:ZcbeCQ3S
UsedRangeはプロパティに変更が加えられたセルを全てカウントアップするから物凄く癖がある
うっかり列範囲全体に書式設定なんかしてると最終行は1,048,576行目なんてことになるので注意
デフォルトの名無しさん [sage] 2018/10/04(木) 12:04:05.58:x9VzQgv/

列に対しての書式設定ならそんな風にはならない。
貼り付けするとそうなる危険性はあるけど、今のエクセルは警告出るし、実行に時間かかるし、めちゃくちゃ重たくなるから、マクロ以前にブック修復すべき案件
デフォルトの名無しさん [sage] 2018/10/04(木) 13:15:55.34:Vut2i4+m
Do loop関数でウェブ上の変数を取り込んでセルに表示したいんですが、セルA1に最新の変数を表示し、一つ過去のは真下セルに移動する
これを繰り返して変数をA列に積み上げいくようにしたいんですが、どうすればよいでしょうか
デフォルトの名無しさん [sage] 2018/10/04(木) 13:37:33.14:Vut2i4+m
挿入でできました 失礼しました
デフォルトの名無しさん [sage] 2018/10/04(木) 14:40:06.72:Vut2i4+m
Selenium Webdriverについて質問です。

@chromeを起動
Aあるwebサイトのユーザーページにログイン
Bユーザーページ上で作業
という操作を自動化しようとしています。
@、Aは良いのですがBが複雑なため、その部分のコードで試行錯誤しております。
しかしコードを修正するたびに@から行っているため時間がかかっております。
@Aで起動したブラウザを利用して、Bから別のsubプロシージャにして、Bだけ実行して検証したいのですがどのようにすればよいのでしょうか。
下が@Aのコードです。

sub 1()
Dim driver As New SeleniumWrapper.WebDriver
driver.Start "chrome", "ttp://https://aaa.com/login?"
driver.get ("/")
driver.findElementByName("UserID").SendKeys ("yamada")
driver.findElementByName("pass_word").SendKeys ("1234")
デフォルトの名無しさん [sage] 2018/10/04(木) 17:50:31.63:ImPAYWBj
Private driver As SeleniumWrapper.WebDriver

Sub Init()
@
A
End Sub

Sub Work()
driver.get(ユーザーページ)
B
End Sub

他のスクリプト言語に変えたほうが楽ですよ
デフォルトの名無しさん [sage] 2018/10/04(木) 18:15:13.64:Vut2i4+m

ありがとうございます。
やってみたのですが、getメソッドでSystem.NullReferenceExceptionというエラーが出ます.....

他のスクリプト言語というとRubyということになるのでしょうか?
デフォルトの名無しさん [sage] 2018/10/04(木) 18:36:18.81:/wVNZxwJ

driverを初期化してないからだと思うぞ。
デフォルトの名無しさん [sage] 2018/10/04(木) 18:46:00.60:Vut2i4+m

大変申し訳ないのですが詳しく説明して頂けないでしょうか....
勉強不足ですみません
デフォルトの名無しさん [sage] 2018/10/04(木) 19:13:03.15:/wVNZxwJ

Private driver As SeleniumWrapper.WebDriver ←モジュール領域(各プロシージャの更に上位)でdriverを定義。ただし初期化していない。

Sub Init() ←Initプロシージャを実行する時にdriverを初期化し@・Aを実行する必要がある
Set driver = New SeleniumWrapper.WebDriver ←ココ
@
A
End Sub

Sub Work() ←Initプロシージャを実行してからWorkプロシージャを実行すると、色々(B)を実行してくれる
driver.get(ユーザーページ)
B
End Sub

念のため言っとくと俺はじゃないがついでに解説しただけで、
が求めているものがこれで満たせるのかまでは関知しない。
デフォルトの名無しさん [sage] 2018/10/04(木) 19:25:04.84:USJCeaSx
質問いいですか?
VBAでコールバックを行うとき
クラスが対象の場合はCallByNameで行う事が出来ますが
標準モジュールの場合、どうするんでしたっけ?
確かAPIを使った様な気がしたんですが
どのAPIを使ってどうするのか
忘れてしまいました。
デフォルトの名無しさん [sage] 2018/10/04(木) 19:32:08.96:apogHBJA

忘れたけど ariawase を見れば出てくるんじゃね
デフォルトの名無しさん [sage] 2018/10/04(木) 20:46:51.81:Vut2i4+m

とても丁寧にありがとうございます。追加質問させてほしいです。
A: 今回「driver」はオブジェクト変数となるため、定義の際はnew演算子を使用する。またはsetで格納する必要がある。ということで良いのでしょうか?

B: で「ただし初期化していない」とありますが、あるサイトで「vbaでは変数宣言したときに初期化が行われる」という記述を見ました。
これは、setで格納されてないから初期化すらされてない という意味でしょうか。

C: プロシージャが実行されるごとに初期化されればよいならば、private変数の定義をやめて、@〜A、BそれぞれでDim driver As New SeleniumWrapper.WebDriver と定義すればエラーは出ないと思ったのですが、
やはりBのgetメソッドのところで「System.NullReferenceException」エラーが出てしまいました。何故なのでしょうか・・・

長文ですみません どうか宜しくお願いいたします。
デフォルトの名無しさん [sage] 2018/10/04(木) 22:18:56.04:/wVNZxwJ

A: あってる
B: だいたいあってる
C: まずコードが動くことを確認してから弄れ。の意図が汲めないならすっぱり諦めて別の方法を考えろ。
流石にこれ以上は自分で調べろ。



追伸
B: とりあえず「値型は宣言と同時に初期化される、オブジェクト型はNewやSetをしてからでないと使えない」と思っとけ
C: 要はWebDriverの「使い回し」がしたいという質問に答えたのが
  ・モジュールレベルで宣言すれば、各プロシージャ内から変数「driver」を通じて同じ実体(インスタンスという)にアクセスできる
  ・Initでモジュールレベル変数「driver」を初期化したりStartなどのメソッドを実行すれば、Workでdriverにアクセスした時にその続きのアレコレができる
  ・逆にInitで初期化やStartその他を実行したにもかかわらずWorkで新たな変数「driver」を宣言したらInitで行った処理が水泡に帰する
  ・またInit内で新たな変数「driver」を宣言し初期化等をした場合も、Init終了と同時に実体が消えて無くなる
仕事中なんであれこれ端折って書いたので間違ってる部分もあるかもしれんが、「インスタンス」とか「スコープ」とかでググって調べてみてくれ。
デフォルトの名無しさん [sage] 2018/10/04(木) 22:32:59.61:Vut2i4+m

本当に丁寧にありがとうございます。
伝えるのを忘れていましたが、言われた通りにコードを記述しうまくいきました。それを踏まえてのCでした。
インスタンス、スコープで調べてみます。ありがとうございました。
デフォルトの名無しさん [sage] 2018/10/05(金) 12:52:55.81:VkzGqctC
「選択したセルの値を-1する」のに下記のようなプログラムを書いた。
Dim cell As Range
For Each cell In Selection
cell.Value = cell - 1
Next
これはOK。

「セルの値がブランクまたは0のとき、ブランクにする」を追加して、
Dim cell As Range
For Each cell In Selection
If cell.Value <> 0 Then
cell.Value = cell - 1
Else
Next
としたら「Nextに対応するForがありません」と怒られてしまいました。
どこがいけないのでしょうか?
デフォルトの名無しさん [sage] 2018/10/05(金) 12:58:15.96:vSWfZutq
if文が閉じてないから
デフォルトの名無しさん [] 2018/10/05(金) 16:28:56.84:JjUc2WZB

お前の知能に障害がある
デフォルトの名無しさん [sage] 2018/10/05(金) 16:54:22.89:9/5M8DWU

インデントが適当だからそういうミスに気がつかない
デフォルトの名無しさん [] 2018/10/05(金) 17:24:22.25:KMKJ670I
else nextとか書く馬鹿にインデントもなにもねーよ
デフォルトの名無しさん [sage] 2018/10/05(金) 17:30:08.09:nkW6jPyv
適当ならいいじゃないか
デフォルトの名無しさん [sage] 2018/10/05(金) 18:25:40.30:wi1wUlXh
Ifは基本一行で済ませるか、If...Then句を書いた後にすぐ改行して同じインデントレベルでEnd If 句を入れる癖をつけろ
デフォルトの名無しさん [sage] 2018/10/05(金) 21:10:17.32:Hvo0Z6Jl

レベルアップするたびにポイントをVBAにばかり振り分けてきたんだよきっとw
デフォルトの名無しさん [sage] 2018/10/05(金) 21:14:01.44:sMfkQDgh

根本はエクセルのエラーメッセージが明らかに間違っているから混乱する
けどプログラムの世界って大体そんなもんと諦める必要がある

で、対処法としては

が正解
インデントが適切なら楽勝で気づける問題

は最悪。開発が超遅くなる
デフォルトの名無しさん [sage] 2018/10/05(金) 22:05:56.09:uERkBuVa
質問です。

テキストファイルの中身をセルに出力する処理をやっているのですが、一部のテキストファイルの文字が正常に出力されません。(縦線 " | "のみが出力される)
ただし、判定によってセルの色を変えているのですが、その機能は生きているので、読み込み自体はできているみたいです。
また、全部のファイルで不具合があるわけではなく、特定のファイルの特定のレコードにのみ起こるっぽいです…

補足すると、テキストファイル自体はメインフレームの伝送機能で送ってます。これが原因に関係あるのかはわかりませんが…

詳細聞かれたらお答えしますので、解決にご協力頂ければと思います。
デフォルトの名無しさん [sage] 2018/10/05(金) 22:07:25.21:uERkBuVa
565です。
本題を載せ忘れていました。
原因、改善方法がわかる方いましたら、ご返答願います。
デフォルトの名無しさん [sage] 2018/10/05(金) 22:15:30.06:vSWfZutq
俺はインデントもしっかりでEnd Ifも先に書く派だな、他の言語での閉じ括弧みたいなもんだし
デフォルトの名無しさん [] 2018/10/05(金) 22:17:06.45:KYi5h4An

その特定のレコードを教えて
デフォルトの名無しさん [sage] 2018/10/05(金) 22:27:19.79:XVCqdvbX

俺はブロックを先に区切らずにダラダラ書いていく方が効率悪いように見えるんだけど、End Ifを先に書かない方が速度上がるの?
本当だったらそうしてみようかな
デフォルトの名無しさん [sage] 2018/10/05(金) 22:27:20.22:vSWfZutq

コンピュータのベンダーや年式が違えば文字コード字形の割り当てが違うことも多い

手順
・テキストファイルの文字エンコード、記述形式を正確に把握する
・化けた部分前後数行のみのテストデータを作る
・ウォッチウィンドウを活用して原因を探る
デフォルトの名無しさん [sage] 2018/10/05(金) 22:30:53.32:uERkBuVa

INPUTはJCL(COBOLアプリを動かすためのスクリプト言語)をテキストファイルに落としたものです。

特定のレコードなのですが、テキストファイルを確認しても、他の出力されているレコードと見た目は全く変わりません。(スペース、データの末尾にも問題なし)
にも関わらず決まったレコードのみに不具合が発生します。

マクロが手元にないため画像は載せられませんが、
JCLについては、画像検索して出てきたものとほぼ同じですので参照頂ければと思います。
デフォルトの名無しさん [sage] 2018/10/05(金) 22:37:26.08:uERkBuVa

やはり文字コードがきな臭いですかね
shift-jis になる仕様のはずなのと、他レコードは大丈夫なため問題ないと判断していたのですが、
vba上でも文字コードを明示してあげる必要がありそうですね
デフォルトの名無しさん [sage] 2018/10/05(金) 22:59:15.65:MhNSlq6Z
メインフレームなぁ・・・最後に触ったの20年近く前で、びっくりするほど覚えてねぇ。

ちょっと気になるんだが、正常に出力されない時に表示される縦線は、
元のテキストファイルにデータとかデリミタとして含まれている文字なのか?
それとも変換できなかった文字が縦線に置き換わっているのか?
デフォルトの名無しさん [sage] 2018/10/05(金) 23:11:22.13:VkzGqctC

なんかコピペしたときにend ifが抜けてた
デフォルトの名無しさん [sage] 2018/10/05(金) 23:23:40.27:lz8xFasJ

縦線はデリミタではなく、元のレコードにも存在しない文字です。
処理としては、テキストファイルのレコードをそのままセルに出力するだけなのですが…
読み込んだ時点では問題なく、出力したときに縦線に置き換わってる感じですねー
デフォルトの名無しさん [] 2018/10/05(金) 23:39:05.08:JjUc2WZB

馬鹿は死ねよ
デフォルトの名無しさん [sage] 2018/10/05(金) 23:53:59.29:E7eIsq4P

ファイルからレコードを読み込んだら、イミディエイトウィンドウにも出力しておく
データをセルに書き込んだあと、もう一度セルから読み出して縦線になってたら中断するようなコードを書く
中断したらイミディエイトウィンドウの内容を確認

どこで化けたか、1つずつ追跡するしかないです
意外なところでミスをしていたり、仕様だったり、落とし穴があるもんです
デフォルトの名無しさん [sage] 2018/10/06(土) 00:57:54.07:F9JdDpiN

1.入力するテキストファイルに「ろくでもない見えない文字」が含まれている(たとえば制御文字)
 →普通のテキストエディタでは見えないことが多いのでバイナリエディタで確認する
2.テキストファイルのレコードを読み取りセルに出力する処理のどこかに問題がある
 →特定のレコードで発生するということは、特定の文字列のパターンか、特定のレコード数でのみ発生している可能性もある
こんな月並みなことしか考えつかないな。
個人的には、文字化けだったとしたら全部縦線に置き換わるのはおかしいと思うが(化けた文字が一切見受けられず縦線だけってのが妙に気になる)
デフォルトの名無しさん [sage] 2018/10/06(土) 04:51:40.31:tnNc0I+3
とりあえず、どんなコードで読み取って表示してるか出さんと話にならんわ
デフォルトの名無しさん [sage] 2018/10/06(土) 07:12:44.67:GeqHzxmy
実はテキストファイルのエンコードがutf8とかだったりして
デフォルトの名無しさん [sage] 2018/10/06(土) 07:49:00.01:4qqF7BWz
メインフレームだからEBCDICだろ変換前はEBCDICの変換は面倒い
デフォルトの名無しさん [sage] 2018/10/06(土) 07:55:07.00:omtH0luh
EOTとかVTの類の制御文字な気がする
デフォルトの名無しさん [sage] 2018/10/06(土) 13:50:07.16:tnNc0I+3

SHIFT-JISのはずって言ってるし、ホスト側に大抵変換ツールあるだろ


文字コードや制御文字の可能性よりプログラムのバグの方が確率高い気がするなぁ
まあコード出せばどっちの問題かはだいたい判別できるはず
化けるデータのダンプでもいいけどな
デフォルトの名無しさん [sage] 2018/10/07(日) 13:12:34.96:DYNz6D7I
色々と意見ありがとうございます。
コードが掲示できなくて申し訳ないですが、
文字コードについてはホストの変換機能があるはずなので、プログラム上のバグとみてデバックしてみます。
デフォルトの名無しさん [sage] 2018/10/07(日) 15:35:18.94:RZXmBbwE


正解。

でも、頭の使い方を知らない人にとっては理解し難いんだろう。
頭を使う作業と単純作業を分けるのが自然になってる人はEndIfを先に書く。
他にもEndWithやNextも先に書くな。

Ifまで書いて条件をどこからかコピペするのに気付いた時はIf a Then...EndIfまで書いてからaと差し替えるとか。
あるいはaの差し替えは中身書いた後の時もあるな。
デフォルトの名無しさん [sage] 2018/10/07(日) 15:38:24.87:RZXmBbwE

文字化けはイミディエイトでは分からない場合も多い。
こういう時はデバック用にバイナリで出力するものを作っとくべきだね。
デフォルトの名無しさん [sage] 2018/10/07(日) 15:38:37.38:yvtwWR1t
そしてaの差し替えを忘れると
デフォルトの名無しさん [sage] 2018/10/07(日) 16:40:59.78:/7FmU20a
VBA「済まんのう、ワシのインテリセンスが貧弱なばっかりに・・・」
デフォルトの名無しさん [sage] 2018/10/07(日) 17:11:47.87:RZXmBbwE

二ワトリか?
デフォルトの名無しさん [sage] 2018/10/07(日) 19:18:32.78:b8EzOufK

閉じタグみたいな単純作業を人間がやるのは馬鹿らしいと気付いて別の言語に移行するのが大正解
デフォルトの名無しさん [] 2018/10/07(日) 21:50:24.98:mIq+f5AO
で、pythonみたいな欠陥言語では空文という概念すらない
インチキな制御文で空文を回避する必要がある

つまり、cが言語として一番単純で簡単
デフォルトの名無しさん [sage] 2018/10/08(月) 10:32:35.37:nJmWXjgB
しかし少し待って欲しい
C言語が扱うのはDelegateじゃなくて
ポインタだから不慣れな人が使うのは結構危険
デフォルトの名無しさん [] 2018/10/08(月) 10:58:07.65:Z4ZqXDLl
コードの作成ができる方がいらっしゃいましたら、助けていただきたいです。

https:〜〜/〜〜〜/〜〜.pdf
で終わるURLが1000件以上あり、業務でそのすべてを印刷しなければならないのですが、
1つ1つIEで印刷していくのが大変面倒で、VBAで一気に印刷することができないか
調べたのですが、.pdfで終わるファイルをwebから自動で印刷するのは不可能なようでした。

そこで、その1000件以上あるpdfファイルを一気にローカルに保存できないかと考えております。

具体的には、
A列にひたすらURLを貼り、マクロを起動するとローカルの任意のファイルにPDFが保存されていくようなVBAが組めないかと考えております。
(一気に印刷することができれば、尚よいのですが)

どなたかコードを組んでいただけないでしょうか。

お手数ですが、よろしくお願い致します。
デフォルトの名無しさん [sage] 2018/10/08(月) 11:21:42.19:H/mp1NsO
curl, wget で、ファイルをダウンロードできる
デフォルトの名無しさん [sage] 2018/10/08(月) 12:38:16.57:TfWfyeTE
ダウンロードやら印刷やらはPowershellならそれぞれ1コマンドで出来るんだけどね
VBAだとそこそこ面倒な気がする
デフォルトの名無しさん [sage] 2018/10/08(月) 12:47:36.35:rY44Et0R
両面2upで印刷とかだとpowershellでも大変じゃないの
デフォルトの名無しさん [sage] 2018/10/08(月) 12:59:10.13:fNYJDKkK

難しいだのなんだの言われてたけど、テキトーにやってたら簡単にできて拍子抜け
ttp://http://fast-uploader.com/start/7094526398997/

Book1.zip

Book1.xlsm
にリネームしてくれ

A列はファイル名
B列はURL
C列はokかNGか。アテになるかどうかはシランので、落とした後のファイル数はなどは確認したほうが良い

コードの編集は適当にやってくれ
今はテスト用に3つだけにしている
あと保存するファイル名は被らないようにかなり適当に作っている。適当に変えてくれ

で、pdf印刷はこの辺に任せるといいと思う
ttp://https://dekiru.net/article/1745/

あと、参考にしたサイト
ttp://https://tonari-it.com/excel-vba-windowsapi-urldownloadtofile/

特に何の関係もない、無害なサンプルpdfが置いてあったサイト
ttp://http://www.shikisensha.com/pdfs.html
デフォルトの名無しさん [sage] 2018/10/08(月) 13:00:47.95:wluWAmXV

powershellスレで聞いた方がいいよ
一括ダウンロードも印刷もけっこう簡単にできる
VBAでもできるけどちょっと面倒だから
デフォルトの名無しさん [sage] 2018/10/08(月) 13:16:18.75:fNYJDKkK
そこまで簡単にできるならもうここで書いてしまって良いんじゃない?
デフォルトの名無しさん [sage] 2018/10/08(月) 13:21:06.52:SdoZVitL
クレクレに割く労力など微塵もない
デフォルトの名無しさん [sage] 2018/10/08(月) 13:21:21.13:XarCorGP

そんなのjdownloader2とか
webブラウザのアドオン使えよw
デフォルトの名無しさん [sage] 2018/10/08(月) 13:36:20.93:fNYJDKkK

あれ、そうか
PowerShellあんまり知らないから見てみたかった
デフォルトの名無しさん [] 2018/10/08(月) 15:25:31.11:41uO404m

死ねよ
デフォルトの名無しさん [sage] 2018/10/08(月) 15:55:52.70:fNYJDKkK

拡張機能探すのあんまり得意じゃないわ
結局作ったほうが早い


ざっこw
デフォルトの名無しさん [] 2018/10/08(月) 18:30:52.01:lvy06Ht8

URLDownloadToFile というAPIがあることをいま知った。
これまで都度 MSXML2.XMLHTTP を作って .Open "GET" していた。
API一発ならその方がスマートだしプログラムをそれベースに書き換えようかと思ったけど、
IDとパスワードを渡さなきゃならない場合は使えないのかな?
デフォルトの名無しさん [sage] 2018/10/09(火) 01:51:39.58:FzGViRAL
N列に時刻データが入っている
但し一部の行はブランク

時刻データは"00:10:00"のように時・分・秒が指定されている
表上は"00:10"つまり「時・分」のみを表示

この時刻データの分の1桁目が9の時のみ1分繰り上げて0にしたい
つまり
"00:19:00"→"00:20:00"
"00:59:00"→"01:00:00"
になるようにしたい

セルは複数セルを不連続で選択し、ブランクはパスして
分の1桁が「9」の場合のみ1分繰り上げするにはどうすれば良いでしょうか?
デフォルトの名無しさん [sage] 2018/10/09(火) 03:48:33.30:GjEV7PXm

秒はどうするの?19分30秒だったら20分00秒にするってこと?

とりま、基本的な処理は分を10で割った余りを求めて、9だったら1を足す
それを選択された全セルに対して繰り返す
デフォルトの名無しさん [sage] 2018/10/09(火) 07:12:30.74:/OeVfiJl

O1=N1+IF(MOD(MINUTE(N1),10)=9,TIME(0,1,0),0)
デフォルトの名無しさん [] 2018/10/09(火) 08:27:33.61:0K1bBeTL

Ruby で、そのテキストの該当部分を表示して、確かめる。
他の言語でもよい


いったん時刻に変換して、1分足してから、また元の形式へ戻す。
つまり、表示形式 → 時刻 → 表示形式
609 [sage] 2018/10/09(火) 10:04:43.66:0K1bBeTL

制御文字の可能性があるから、文字列をバイナリで見る

文字コードや、UTF-8 ならBOM の有無

セルに入力した時に、特別な意味を持つ文字が入っているとか?
シングル・ダブルクォーテーションなど?
デフォルトの名無しさん [] 2018/10/09(火) 16:25:52.94:YqupZDTJ
会社で社内Webのform類のsubmitボタンを押して出てくるデータベースのデータが抽出されるシステムがあります。
(まあ、このようなシステムはどこにもあると思いますが。)
これ、どうにかして大元のデータベースのデータを丸ごとExcelにインポートする方法ってないですか?
Webのソースを見れば、データベースのサーバのアドレスが書いてあって、それをVBAで取り込む、みたいなのをイメージしているのですが
技術的には可能ですよね?
デフォルトの名無しさん [sage] 2018/10/09(火) 16:53:10.93:iuxGmBKG
技術的には可能だがお前には不可能
イメージが見当違いだ
デフォルトの名無しさん [sage] 2018/10/09(火) 16:58:57.67:ZX9nrIhI
WEBサーバ自体をハックできるなら。
大抵PHPか.Net実装でソースからは見えない
デフォルトの名無しさん [] 2018/10/09(火) 16:59:23.34:YqupZDTJ
あまりわたしを怒らせないほうがいいぞ
わたしは怒ったら怖いんだぞ
デフォルトの名無しさん [sage] 2018/10/09(火) 17:21:21.07:ZX9nrIhI
コンプライアンス違反で懲戒解雇&賠償請求訴訟起こされたいのなら、止める義理はない
デフォルトの名無しさん [sage] 2018/10/09(火) 17:57:17.02:3Eshr90N

会社のシステムなら上司に相談しろよ
社内規定に違反すると最悪解雇もあるからな
デフォルトの名無しさん [sage] 2018/10/09(火) 18:10:23.08:MhhKJFZu

怒らせたくはないけどまともなシステムならクライアントから見えるところにデービーのアドレスは書かれてないよ
デフォルトの名無しさん [sage] 2018/10/09(火) 18:17:11.24:MhhKJFZu
クライアント↔Webサーバ↔DBサーバ
ブラウザがやり取りするのはWebサーバ
その先にはアクセス出来ないのが普通
デフォルトの名無しさん [sage] 2018/10/09(火) 18:18:22.93:alG4HLy2
普通に上司経由でシステムの所管部署に相談してAPIを共有してもらった方が安全だろ
自作コードでサーバーを直接叩くのはいろんな意味で危険
デフォルトの名無しさん [] 2018/10/09(火) 19:14:35.52:AeEBE3gj
焦っとるなプロさんwおまえらプロさんのコードも十分すぎる程危険なんやがw
デフォルトの名無しさん [sage] 2018/10/09(火) 19:46:02.37:fy0WNSeQ

出発点から「自分で勝手に何かする」というのが間違い。
他の人も言うとおり、まずは自社で管理してるDBなら管理部署に、ベンダのシステムであればそのベンダに、やりたいことを伝えて対応してもらう。
対応してもらうのが無理なら、管理部署やベンダにAPI等を利用してツールを作成して良いか確認を取る。
もしOKなら、API等を利用してツールを自作する。完成したら必ず管理部署やベンタにツールを見てもらう。

勝手にベンダのAPIを利用してSQL発行ツール自作してクビ寸前まで行ったことがある人を知ってる。
大幅減俸で落ち着いたらしいけど今はもういないから実際のところどうだったのかは知らんが。
606 [sage] 2018/10/09(火) 20:01:04.99:FzGViRAL

ども!

ワークシート上なら"00:59:00"+"00:01:00"→"01:00:00"みたいに単純に繰り上げが出来るので
マクロで同じような計算が出来ないかと考えたんだけど(さんのコメがそうかな?)
具体的な手順が思い当たらなかったので、原始的なやり方で作ってみました

strTime = Format(cell.Value, "hh:nn:ss")でセルの時刻を文字列に読み込み
時(strH)・分(strM)・秒(strS)を切り分け、分の1桁目が9の時だけ

intH = val(strH)、intM=val(strM)で数値化した値から
sumM = ntH*60 + intM + 1 
intH = int(sumM/60)、intM = sumM - intH *60 を計算し

これを時刻に直してセルに戻す、という手順で出来ました
デフォルトの名無しさん [sage] 2018/10/09(火) 21:10:44.20:KUCIqBg4
先週文字化けの件で質問をした者です。
あれから例のマクロをデバッグし、無事原因がわかりました。
文字コード云々ではなく、単純なロジックミスという落ちでした…。
お騒がせをしましたが、ご助言くださった方々ありがとうございました。
デフォルトの名無しさん [sage] 2018/10/09(火) 21:29:16.80:b4f5o7ms
オートフィルターをかけた状態の表を配列に取り込むには、Copy Pasteで一旦どこかに貼るしかないのかな?
デフォルトの名無しさん [sage] 2018/10/09(火) 21:52:35.13:ZX9nrIhI

クローズ報告ありがとさん、燻りそうだったのでクローズ連絡は助かる
デフォルトの名無しさん [sage] 2018/10/09(火) 22:00:23.20:fy0WNSeQ

やっぱそっちだったか。解決したようで良かったわ。
デフォルトの名無しさん [sage] 2018/10/09(火) 22:45:02.58:AYSUcKLB

ヒントはF5、表示セルのみ
デフォルトの名無しさん [] 2018/10/09(火) 23:06:53.75:YqupZDTJ


信じられない。
なぜツール作っただけで解雇とか減給とか?
チームは違うけどチームの作業効率をはるかに高めることをするという非常にほめられることをするというのに。
別に会社になんの不利益も与えない。
デフォルトの名無しさん [sage] 2018/10/09(火) 23:19:05.15:/OeVfiJl

普通にある
>非常にほめられることをする
ほめられない

ってか考えが浅すぎるから本当に気をつけろ
デフォルトの名無しさん [sage] 2018/10/09(火) 23:44:23.50:fy0WNSeQ

問題は色々あるが、まずは許諾を得ずに勝手に構造を解析するということ。つまりリバースエンジニアリング。
次にシステム上想定していない勝手なSQLをこれまたシステム上想定していない勝手な方向から流すということ。

「会社のために」の枕詞を取り払えばこういうことになる。その枕詞が付いていたとしてもリスク管理の観点から非常に危ない。
特に、決められた手続き決められたデータが抽出できる環境がありながら全データ抽出したいとか、クラッキング以外の何ものでもない。
自分で勝手に作ったSQL発行ツールが原因でサーバに異常な負荷をかけてしまったら責任が取れるのか?
そのツールが悪意のある第三者に見られあるいは持ち出され、悪用されたら責任を取れるのか?

自分の会社に対する誠意を完全に証明できる自信があるとか、完全無欠に誰にもどこにも迷惑をかけないツールを作成できる自信があるとかなら、なおのこと手順を踏むべきだ。
黙ってやろうとすること自体が会社を納得させる自信のなさと会社への不誠実さの顕れだ。
デフォルトの名無しさん [] 2018/10/09(火) 23:59:21.37:XhVkj+aM
大げさなやつらだな
普通に「ODBCでアクセスしたいからID発行してプリーズ」って管理部署に頼め
デフォルトの名無しさん [sage] 2018/10/10(水) 02:27:09.31:XHKsn4Nc
お前らビビりすぎだろ
外からDBアクセスできるなら
トランケートされても文句言えねえわ
デフォルトの名無しさん [sage] 2018/10/10(水) 02:27:50.97:XHKsn4Nc
真面目か
デフォルトの名無しさん [sage] 2018/10/10(水) 04:01:34.04:Vii71/zC
作成依頼です。

エクセルのA1セルに入力されている住所をgoogleearthで開きたいのです。
マクロでgoogleearthを立ち上げるとこまではshell関数で作ったのですが,そ
の先をどうすればよいのかさっぱりわかりません。
googleearth左上の検索のところにA1セルの住所を自動で入力して検索ボタンを押す,
というマクロを教えて頂けないでしょうか。

よろしくお願いします。
デフォルトの名無しさん [] 2018/10/10(水) 04:15:39.03:2oZCcDsE
お前らが甘やかすからこういう全部作ってくれ馬鹿が調子に乗る
デフォルトの名無しさん [sage] 2018/10/10(水) 04:32:03.45:crh5hRT2

しね
よろしくお願いします
デフォルトの名無しさん [sage] 2018/10/10(水) 04:43:16.64:qywSzTWT
それは、ウェブページ・ブラウザの自動操作だろ?

iMacros, Selenium IDE とか。
それか、Ruby で、Selenium Webdriver を使う
デフォルトの名無しさん [sage] 2018/10/10(水) 07:20:01.37:R8Iewqe6
CREATE SESSION しかないに決まってるだろ
デフォルトの名無しさん [sage] 2018/10/10(水) 07:54:53.57:8C9bqvqY

hyperelink関数で良いんじゃないの
=hyperlink("ttp://https://earth.google.com/web/search/"&"皇居")
とか
628 [] 2018/10/10(水) 12:15:23.99:FaIKeQC1

大げさな。

ちなみにそのデータは顧客関係の個人情報は一切含まれてなくて、含まれているのは製品や購入パーツの在庫情報だけだ。
ある作業で、その製品や在庫パーツのあるデータを使って簡単な計算をしなければならず、
現状ではいちいちWebサイトで1個1個フィルードに入力してSUBMITボタンを押して出てきたデータをExcelに貼り付けてそれを計算しなければならない。
しかしそのデータベースをexportすることができればWebサイトで1個1個地道に長時間かけて手入力で全部データをコピペしなければならない。
こんなアホなことはできない。というかこんなアホなことを真に受けてまじめにしようとする人(うちのチームの人う)ことアホだ。
ちなみにWebからExcelにexportするためのボタンはあるがなぜかほしいデータが入らないようにしているため利用できない。
デフォルトの名無しさん [] 2018/10/10(水) 12:17:07.30:FaIKeQC1
そのデータベースから一挙に全データをexportできれば
あとはvlookupを使ってすべての作業が一瞬で終わり。1分。
それができないから、上司からしめきりが1か月後みたいに設定されてる。
デフォルトの名無しさん [] 2018/10/10(水) 12:18:25.21:FaIKeQC1
【誤】
ちなみにそのデータは顧客関係の個人情報は一切含まれてなくて、含まれているのは製品や購入パーツの在庫情報だけだ。
ある作業で、その製品や在庫パーツのあるデータを使って簡単な計算をしなければならず、
現状ではいちいちWebサイトで1個1個フィルードに入力してSUBMITボタンを押して出てきたデータをExcelに貼り付けてそれを計算しなければならない。
しかしそのデータベースをexportすることができればWebサイトで1個1個地道に長時間かけて手入力で全部データをコピペしなければならない。
こんなアホなことはできない。というかこんなアホなことを真に受けてまじめにしようとする人(うちのチームの人う)ことアホだ。
ちなみにWebからExcelにexportするためのボタンはあるがなぜかほしいデータが入らないようにしているため利用できない。

【正】
ちなみにそのデータは顧客関係の個人情報は一切含まれてなくて、含まれているのは製品や購入パーツの在庫情報だけだ。
ある作業で、その製品や在庫パーツのあるデータを使って簡単な計算をしなければならず、
現状ではいちいちWebサイトで1個1個フィルードに入力してSUBMITボタンを押して出てきたデータをExcelに貼り付けてそれを計算しなければならない。
しかしそのデータベースをexportすることができればWebサイトで1個1個地道に長時間かけて手入力で全部データをコピペする必要はない。
こんなアホなことはできない。というかこんなアホなことを真に受けてまじめにしようとする人(うちのチームの人う)ことアホだ。
ちなみにWebからExcelにexportするためのボタンはあるがなぜかほしいデータが入らないようにしているため利用できない。
デフォルトの名無しさん [sage] 2018/10/10(水) 12:23:41.33:ic51pubx


SELECT権限すらつけてくれないってなら殴れ
デフォルトの名無しさん [sage] 2018/10/10(水) 12:25:54.86:XztHvnca
システムを作る側の目線でいうと、UIベースで自動化しようとするのは迷惑だから頼むからやめろ
普通に権限を貰うか、システム改善を依頼してくれ
デフォルトの名無しさん [sage] 2018/10/10(水) 12:36:26.92:qywSzTWT
外部の部署が、DB に直接アクセスすることは、普通は認められない

他の部署の人が頼みにきて、裏口でやっている話はよくきくけど、危険な行為。
ルール自体を変えないで、ルール違反の形で、黙って下の者がよくやるけど、
上の者が把握・管理していないから、会社として成立していない

ドイツ車で、大問題になった。
下の者が、勝手にプログラムを書き換えていた
デフォルトの名無しさん [sage] 2018/10/10(水) 12:56:48.86:Zvsf2lMk

大げさでも何でもない。
Webから取ってくるのだって関係部署に連絡して承認をうけるのが普通。
ましてDBに直接繋げたいなら上司に相談しとけ。
デフォルトの名無しさん [sage] 2018/10/10(水) 13:12:18.23:ic51pubx

外部の部署と言うより「データは社内の共有データでDBはシステム部が所管している」
ように読めるけどね。
昨今のデータ活用・データ民主化の流れでエンドユーザにSELECTさせるのは当然になってる。
もちろん無断でやるなんてのは論外だが。
デフォルトの名無しさん [sage] 2018/10/10(水) 14:45:22.50:47KSV23N

どういう意味?
可視セルをそのまま配列に放り込んでも連続した部分しか取り込めない仕様だけど
デフォルトの名無しさん [sage] 2018/10/10(水) 16:35:31.34:Umu+TTue
今回ばかりはRubyさんの言う事が正しい気がする

今の人件費はこれだけです
RPAでやったらこうなります
DBへのアクセスを許可してもらえればこうなります
だからこうして欲しい、と、数字を出して説得するのが
いんじゃないかな
デフォルトの名無しさん [sage] 2018/10/10(水) 18:29:59.16:hH0ybitP

いや、改めて試したけどできるぞ?
デフォルトの名無しさん [sage] 2018/10/10(水) 19:13:54.40:YG2jN7++

アマチュアならこういう意識が薄くてもしょうがない
デフォルトの名無しさん [sage] 2018/10/10(水) 19:36:58.16:8C9bqvqY
>643
SELECTは危険ではないけど重くなるんだよ
特に初心者が書いたwhereもしないSELECTとか重くてかなわん
だから素直に頼んでくれ、ほんと


それでいいよ

全件SELECTしてからaccessでフィルタする奴は本気で死ねとしか思わん
621 [sage] 2018/10/10(水) 22:05:51.66:KAlixXjp

目的:Web系在庫管理システムのデータ抽出の際の項目選択の手間を省きたい
手段:以下の作業を自動実行する
 1.在庫管理データベースからすべての情報をその都度抽出する
 2.全データから必要な情報のみを抽出し、加工(計算など)を行う

この、小さな目的達成のために払うリスクがでかすぎることを解っていないところとか、
俺の知るクビになりかけた人物と同じこと言ってて流石に寒気がした。
もっともその人が作ったのはエンドユーザーが抽出条件をある程度自由にカスタマイズ・保存できる文字どおりのEUCツールで、
ハイコストなSELECTが発行されまくった結果システム全体のパフォーマンスが微妙に落ちて、それでベンダのSEが気づいたんだが。

はじめから管理部署なりベンダなりに相談しておけば:
A.システム内に解決する手段が既にあるかもしれない(標準のEUC機能に抽出条件を保存できたり)
B.システムで対応可能だったかもしれない(SEが管理する簡易的な抽出機能への追加など)
C.システムで対応できずともベターな解決手段を探れたかもしれない(APIへの接続許可など)

も言っているがDBもサーバも回線(帯域幅)もタダではないし有限だし消耗品と思え。
デフォルトの名無しさん [sage] 2018/10/10(水) 22:12:58.00:R8Iewqe6
ユーザーに触らせたくないDBとEUC用DBの違いって何なんですかね?
デフォルトの名無しさん [sage] 2018/10/10(水) 22:14:25.01:8C9bqvqY
>DBもサーバも回線(帯域幅)もタダではないし有限だし消耗品と思え。
そうだね、業務用途のサーバーと回線は従量制と知らない人が多すぎる
逆に従量制じゃなければ全員に迷惑がかかるって事になり、それまた迷惑
開発の端の端にいるなら、回線ってとんでもない金額がかかってるって知っておいてほしい

自分のPC内でぐるぐる回すだけならまぁわからんでもないけどな
デフォルトの名無しさん [sage] 2018/10/11(木) 09:09:34.84:3Bdkvxy9
サーバー内で、ちゃんと絞り込みが出来ているかとか、
実行計画を見て、確認したり

高度情報処理資格のDB スペシャリストを取ったり、ミックの本を読んだり、
勉強した人しか、DB を触っちゃいけない
デフォルトの名無しさん [sage] 2018/10/11(木) 10:35:12.02:OPRsoT4p
DBスペシャリスト持ってないの丸わかりだな
DBスペシャリストで扱うのはデータモデリングやアプリケーション設計が中心で、
クエリチューニングのような運用寄りの出題はほとんどない
デフォルトの名無しさん [sage] 2018/10/11(木) 10:37:57.07:ljJfys9R
そんなハードル高くしてどうすんだよ
ビジネスで競争に負けてたらシステムの予算だって出なくなるんだぞ
デフォルトの名無しさん [] 2018/10/11(木) 12:17:10.50:z21fIq1H
なぜか質問そっちのけでレベルの低いマウント取り合いになるプロさん達w
デフォルトの名無しさん [] 2018/10/11(木) 12:37:03.82:r2SLIRPN
おれも素人だが、今回の件はいくらなんでもアホすぎる質問をした素人VBAerが悪いと思う
656 [sage] 2018/10/11(木) 12:55:04.68:3Bdkvxy9
DB スペシャリストの過去問題をやればよい

上司から、レコードの絞り込みが甘いと注意されました。
表設計をどう直しますか?

もちろん、出題されている
デフォルトの名無しさん [sage] 2018/10/11(木) 14:56:15.23:O4qg21v8
ExcelVBAのスレでいきなりDBスペシャリストの話題持ち出すのはどこのアホウなんだよ
デフォルトの名無しさん [sage] 2018/10/11(木) 16:13:58.69:L8oPmsqv
いきなりってわけじゃないけどな
それなりの流れがある
デフォルトの名無しさん [sage] 2018/10/11(木) 16:14:37.48:L8oPmsqv
VBAスペシャリストの皆さん
デフォルトの名無しさん [sage] 2018/10/11(木) 19:13:53.56:ZOLcqtf+
まぁ使用する範囲で同じ内容のテーブル作っておいて
マスターの方のテーブルの登録や更新、削除をトリガーとして
別途作った同じ内容のテーブルに反映させた側のテーブルを見に行くようにしたりする
システムには当たったことがあるけどね。

何にせよ余計なことはやらせない方が無難ではあるよ。
デフォルトの名無しさん [] 2018/10/11(木) 20:25:53.87:xmZyhWmI

Accessのウィザードで作ったリンクテーブルやインポート使ってるんだけど
これって該当します?
sharePointのリスト取り込むときってどうするのがいいんだろう?
デフォルトの名無しさん [sage] 2018/10/11(木) 20:46:07.05:Y5yLaTkx

勝手に接続してるなら、どういう方法だろうとアウトと思っておいたほうがいい

重さで言うなら、SQL直接書くかせめて確認するのが一番確実
とにかく最初にwhereでフィルタするんだ
そのフィルタしたテーブル同士で結合したりするんだ。それだけ覚えておけばどうにかなる
リンクしてるだけだと特に意味はないわ
ってかこの辺はDB板行ったほうがいいだろう
デフォルトの名無しさん [] 2018/10/11(木) 20:54:31.19:Pm0hH2qh
SELECT TOP 100 * FROM TableA
デフォルトの名無しさん [sage] 2018/10/12(金) 17:32:15.43:PXpuxPjv
許可もらわんと管理部門から逆にIPたどられて社内のPCから不正なアクセスが頻繁にあるって言われなければいいね
デフォルトの名無しさん [] 2018/10/13(土) 18:47:47.50:L3Dj2/gz
コレがエクセルのシートしか使えないヤツラの知能の限界
しょうがない
どこにインデックスはってるか見もせずに
where句で巨大なテーブルをいきなり検索したりするからな
そしてフルスキャンになる

そしてcountで件数を確認もせずにいきなり大量抽出する

知能が低いヤツラにSQLさわらせるとこうなる
もうね予見できるワケ
デフォルトの名無しさん [] 2018/10/13(土) 18:51:04.15:L3Dj2/gz
低学歴知恵遅れの知能が低いヤツにSQLはキチガイに刃物
低学歴知恵遅れの知能が低いヤツにオブジェクト指向はキチガイに刃物

銃刀法違反なみの重罪

コレは定説
デフォルトの名無しさん [sage] 2018/10/13(土) 18:53:51.58:T9MlimPF
キチガイ登場
こわい
デフォルトの名無しさん [] 2018/10/13(土) 19:04:43.08:L3Dj2/gz
そもそもdbにはいっぱい個人情報が一杯つまってる
こっちのほうが重大な問題だからな

表ごとにセキュリティレベルがあるのも当然
そういった制限すらないのはヤバイ会社

だれがいつそういった情報を取得スしたか
どんな業務で誰の承認で取得したか
ちゃんと履歴が必要になる
デフォルトの名無しさん [sage] 2018/10/13(土) 21:11:38.49:iFQl0LJl
いっぱい一杯
デフォルトの名無しさん [sage] 2018/10/13(土) 22:25:56.64:/vvsi1/9
Excel VBAの話をしてよ
デフォルトの名無しさん [] 2018/10/14(日) 00:37:19.40:Q3eQCyRU
excel vbaで語ることなんかあんの
excel vbaで語るなら、それを併用して得られるメリットぐらいしかない

excel vbaでなんかいいことあった?
デフォルトの名無しさん [sage] 2018/10/14(日) 10:50:03.22:xKzvoEYL

おまえはなんの話をしているんだ?スレ名読めんのか?
デフォルトの名無しさん [sage] 2018/10/14(日) 11:16:34.21:RzJcTIeH

その質問はご法度
無視されるか話をそらされるだけ
のようにね
デフォルトの名無しさん [sage] 2018/10/14(日) 15:42:57.90:jfwl8Yip

彼女ができました
デフォルトの名無しさん [sage] 2018/10/15(月) 21:16:00.15:E6pr56BO
 私たち日本人の、日本国憲法を改正しましょう。
総ム省の、『憲法改正國民投票法』、でググって
みてください。拡散も含め、お願い致します。
デフォルトの名無しさん [sage] 2018/10/16(火) 03:46:59.80:SShwrEAs
激しくスレチ
デフォルトの名無しさん [sage] 2018/10/16(火) 15:17:46.48:ZlBiMRvR
excel vbaの話題がない、最近使ってないし
デフォルトの名無しさん [sage] 2018/10/16(火) 19:43:27.94:VGXZfwAw
別に無いならないでそれでよかろう。話題がないとお前は困るのか?
682 [] 2018/10/16(火) 20:24:31.25:wwtQC7N8

困るから言っておるのだ
デフォルトの名無しさん [sage] 2018/10/16(火) 20:33:30.35:7RIuHdb8
yahoo知恵遅れなら毎日うんざりするような質問だらけだよ
デフォルトの名無しさん [] 2018/10/16(火) 20:35:04.21:H029zngb
ヤホーよりプロさんの方がバカっぽいけどねw
デフォルトの名無しさん [sage] 2018/10/16(火) 20:58:20.65:7RIuHdb8
知恵遅れでの"VBA" "VBスクリプト" "マクロ"いずれかを含む質問数、過去24時間に76投稿
回答者もうんざりしてる
デフォルトの名無しさん [sage] 2018/10/16(火) 22:01:20.92:QoFGLA2x
エクセルの鉄則:達人であることは隠せ
ttp://https://jp.wsj.com/articles/SB10750612626653313748604584520883598309574
「次々と人がやって来ては『エクセル...
デフォルトの名無しさん [sage] 2018/10/16(火) 23:49:27.99:LqxRfbs7
ここが面白く無いせいでPowerShellerがExcelスレまで荒らしに来てて困る。
デフォルトの名無しさん [sage] 2018/10/17(水) 13:34:37.11:i+REgo0L
カンマ区切りのcsvをデータインポートで読み込むと一部がズレます
csvを一度メモ帳に全部貼り付けて、それをexcelに貼ったあとデータ区切りでカンマを選ぶと上手く取り込めます
この挙動の違いがイマイチよく分からないんですがどうしてメモ帳に貼り付けることで上手く読み込めるようになるんでしょうか
デフォルトの名無しさん [sage] 2018/10/17(水) 13:46:32.94:tHw/Qu/E
そら貼り付けとデータインポートは別の機能だからだよ
Excelは既存の機能の動作がわずかでも変わったら必ずマクロが動かんようになったやないかどないしてくれんねんボケと山ほどの馬鹿が怒鳴り込んでくる
似た機能を追加したから共通化しますね〜と安易に仕様変更できず、大量の機能の重複を抱えながら昔のバグっぽい挙動も尊重して個別にメンテしてるの
このスレにいるような連中のせいでな
デフォルトの名無しさん [sage] 2018/10/17(水) 14:48:36.05:9GZlDgUm

データのせい
デフォルトの名無しさん [sage] 2018/10/17(水) 14:59:38.33:uJo2tnoC
が正しい。 は戯言なので無視していい。
メモ帳貼り付け保存後、と前とをバイナリー比較すれば理由は見えてくるはず
デフォルトの名無しさん [sage] 2018/10/17(水) 16:42:17.32:i+REgo0L
ありがとうございます
bomとかそういう感じですかね
また、うまく読み込めないのは一部utf8形式の文字コード?があり、それをsjisに変換出来ないのが原因のようでした
データインポートでutfを選択したら無事開けました
デフォルトの名無しさん [sage] 2018/10/17(水) 17:06:43.54:S++6iW66

一部だけUTF8?
混在してたってこと?
デフォルトの名無しさん [sage] 2018/10/17(水) 18:02:13.22:5pOkIjLu
半角と全角の混在で全角だけUTF-8とか
デフォルトの名無しさん [sage] 2018/10/17(水) 18:07:18.62:7Q2iPe/Z
ダブルクォーテーションとカンマのくくりが上手く行ってないとか
デフォルトの名無しさん [sage] 2018/10/17(水) 19:38:14.44:uJo2tnoC

あたりまえ、UTFもShiftJISも英数は同じ
デフォルトの名無しさん [sage] 2018/10/17(水) 23:31:27.45:SJQ0JWQn
英数だけが半角とは限らんがな
ココニカケルカナ
デフォルトの名無しさん [sage] 2018/10/18(木) 13:31:04.71:ks5As5t+
セル内改行でひっかかってるのかも
改行コードは何種類もあるし、読み込み方法によって正常に認識してくれないケースがあるから
デフォルトの名無しさん [sage] 2018/10/18(木) 13:46:30.50:B1wZDxhL

メモ帳経由だとうまくいくってのと整合しない
デフォルトの名無しさん [sage] 2018/10/18(木) 14:30:43.91:vpgDyIt0
で解決報告あるのに何をいつまで考えてるのw
デフォルトの名無しさん [sage] 2018/10/18(木) 19:04:18.15:ekkKNanr
自分でもしっかりと把握してないので書くつもり無かったんですが一応解決の詳細書きますね
まずダブルクォーテーションやカンマはないです
あと自分の理解と説明が足りてませんでした
一部utf8ではなく全部utf8で基本普通の英文字と数字なのでsjisでもぱっと見問題なく開けるけどクエリストリングのカラムにノーブレーキングスペース?やsjis対応してない文字列があり、そこで上手いこと処理出来てなかったみたいです
utf8をsjis指定でデータインポートしようとしたのが間違いの発端でしたスミマセン
デフォルトの名無しさん [sage] 2018/10/18(木) 19:33:45.83:vpgDyIt0
いやいやおつかれさま
デフォルトの名無しさん [sage] 2018/10/18(木) 23:12:45.91:wIeiUTi/
WorkSheet_Changeでセルの内容に変化があったときだけ文字色を赤にする処理を行おうとしています
対象が単体ならApplication.Undoで比較できますが、複数の場合1セルずつに対してUndoができないため
対象全体の内容を一時シートにコピー→For Eachで元データと1つずつ比較しているのですが、もっとスマートな方法はあるでしょうか?
デフォルトの名無しさん [sage] 2018/10/18(木) 23:38:51.56:fhgndB5P

Private Sub Worksheet_Change(ByVal Target As Range)
Target.Font.Color = -16776961
End Sub

これで良いのでは???
デフォルトの名無しさん [sage] 2018/10/18(木) 23:45:12.89:wIeiUTi/
書き方が不正確でした
「対象セルの値が変更される前と一致しない場合にのみ」文字色を変えたい、です
デフォルトの名無しさん [sage] 2018/10/18(木) 23:54:42.06:vpgDyIt0
赤くしなくても共有と変更履歴で代用可能だろ
デフォルトの名無しさん [sage] 2018/10/18(木) 23:58:11.74:fhgndB5P

あぁそういう事か、すまん
今「excel change before」で調べただけだけど、そうするしかなさそう
selectionchangeでselectionの内容を保存しておくみたいだねぇ
よー考えるわ
デフォルトの名無しさん [sage] 2018/10/18(木) 23:58:42.58:fhgndB5P

そうだねぇ
なんか赤にする以外の方法の方が良い気がする
デフォルトの名無しさん [sage] 2018/10/19(金) 14:49:27.87:2evJVEIF
くそう、↑のやり方以外が思いつかない。
セルにtagプロパティでもありゃ前値保持できるのに。。

赤字にしたい目的がわかれば、そもそも別の簡単な手とかあるかも?(逃げ)
デフォルトの名無しさん [sage] 2018/10/19(金) 21:19:57.26:acLDgyPd

Excelをフロントエンドにしたデータベース管理です
一度に複数のデータを弄ることが多いため、フォームではなくテーブルに直接データを読み込み、編集後に更新といった流れで、この更新部分の判定を文字色で行っています
作業者自身も更新前にどこを変更したかひと目でわかると考えてこの方法を取ってますが、もっとベターな方法があるなら全然乗り換えたいです
デフォルトの名無しさん [sage] 2018/10/19(金) 21:42:58.96:yGBPiuMh
編集後・更新
この間に変更する予定のセルに対して処理をかませることができそう、というか出来るだろう
デフォルトの名無しさん [sage] 2018/10/19(金) 23:04:57.15:MRFHlf9T
Vue.js などのウォッチャ・データバインド・リアクティブシステムだろ

データ更新前後のフックは、無いのか?
デフォルトの名無しさん [] 2018/10/20(土) 02:32:55.91:ZiSB9nEL
Ifとforだけでとりあえず簡単な処理くらいはさせられるようになったんだけど、次は何を学べば順当にステップアップできる?
イベントプロシージャもダブルクリックだけは理解した
Constで柔軟なコード書くのも学んだ
配列はいまいち便利な使い道がわからない
デフォルトの名無しさん [sage] 2018/10/20(土) 06:58:16.21:JSzrZOTM

処理の制御自体は分岐と繰り返しを覚えれば大抵なんとかなる。
ロジックをよりスマートにしたい。処理時間を短縮したい等なら、配列やアルゴリズム等の効率的なやり方が必須になる。
特に、セルを使うならば配列は絶対使ったほうがいい。二次元配列と聞くとよくわからなそうだが、
(y軸,x軸) を指定するだけだから、一見難しそうに見えても簡単だよ。
あとは、何をやりたいかによるかな。それによって取得するべき技術が決まってくると思う。
デフォルトの名無しさん [sage] 2018/10/20(土) 07:07:20.99:JSzrZOTM

配列使った方がいい理由を補足すると、
配列変数を使えば、変数の数を大幅に減らすことができるかつ、ループ文を使って1から最大数までアクセスがしやすいから。例えば、人間という名前の違う変数を別々に100人定義するのは面倒。
だが、配列変数を使えば1行で定義できる。

セルに関して言うと、VBAはセルにアクセスした際に大幅に時間を使う。値を編集するたびに毎回セルにアクセスするよりも、配列変数に格納をして、まるごとセルに代入するようにすれば、アクセスは1回で済む。
(それっぽく例えるなら、積み木を片付ける時に1つずつ摘まんで箱に入れるか、形を整えた後まとめて箱に入れるかの違い)
デフォルトの名無しさん [sage] 2018/10/20(土) 07:49:40.17:/P2yZ5ci

次は違う言語を学ぶといいよ
pythonとかがオススメ
デフォルトの名無しさん [sage] 2018/10/20(土) 08:15:19.11:A4xnc2/3

シートはセルの二次元配列
ブックはシートの一次元配列
合わせて三次元の配列

元々エクセル自体が配列の塊なので、
vba上だけで配列を持たなくてもなんとかできるようにはなっている

他のプログラムだと配列なしなんてありえないんだけどね

vbaで配列を扱う大きなメリットとしては、爆速にできる事

で、そこまで来たら何を覚えるかだけど
・objectの扱い。set foo = sheets("name")
・fso(filesystemobject)

この辺かね〜

他言語やるなら俺もpythonがオススメ
デフォルトの名無しさん [sage] 2018/10/20(土) 09:34:05.81:46UfR13B

>合わせて三次元の配列

「三次元配列」と書かないところが正確でイイ!
デフォルトの名無しさん [sage] 2018/10/20(土) 11:18:59.41:+OPbDxrw
あ・・・Application.Workbooks(3).Worksheets(1).Cells(1, 1).Characters(2, 2).Font.Color = vbRed
デフォルトの名無しさん [sage] 2018/10/20(土) 11:51:10.77:ZiSB9nEL
参考になります!説明がとても分かりやすいですね 尊敬します
配列を学ぶことでの処理の高速化も理解できました
setはサンプルコードでよく見かけるなとは思ってたけど、詳しく掘り下げてみます
fsoは初耳なのでじっくり学びます
Pythonも並行して学びたいと思ってたのでちょうどいいタイミングみたいですね
ありがとうございました。
デフォルトの名無しさん [sage] 2018/10/20(土) 12:18:11.17:4zkFVcA8
for each文かな
デフォルトの名無しさん [sage] 2018/10/20(土) 12:25:25.27:A4xnc2/3
あぁfor eachは必須だね
デフォルトの名無しさん [] 2018/10/20(土) 13:40:10.36:fOofNO0j

余裕があるならアセンブリ言語をちょっと齧っとくのがいいと思う
◆QZaw55cn4c [sage] 2018/10/20(土) 14:06:53.02:9jkSTDWo

アセンブラとか環境とかはどう調達すればいいのでしょうか?
デフォルトの名無しさん [sage] 2018/10/20(土) 14:48:16.50:wrk6+Nbn
masm とか nasm とかのキーワードで調べる
っていうか、vbaの範囲外のことまでここで聞くなよ
デフォルトの名無しさん [sage] 2018/10/20(土) 17:52:59.67:b1m8oY5e

デバッグの方法(VBEの機能)
ユーザーフォーム
for next以外の繰り返し(do loop)
デフォルトの名無しさん [] 2018/10/20(土) 18:35:11.69:fOofNO0j

齧るだけだからネットで調べてだいたいの仕組みが分かればそれでいいんだよ
「アセンブラ 入門 casl」でググって見つかったサイトで勉強してみるのがいいと思う
資格の勉強にもなるし

やる気あるなら機械語が使えるポケコンを買って実際に
ハンドアセンブルしてみるのもいいかも
◆QZaw55cn4c [sage] 2018/10/20(土) 19:32:33.10:9jkSTDWo

casl2 は気が進まなくって…だってハードがないんでしょう?
デフォルトの名無しさん [] 2018/10/20(土) 19:45:41.44:fOofNO0j

うん、ハードはないな、仮想CPUだから
でもコンピューターの仕組みは分かるようになる
俺はアセンブリの知識のおかげでデバッグとかで役に立ってる
デフォルトの名無しさん [sage] 2018/10/21(日) 09:08:05.20:kG1rnb84
オデッセイのやってるvbaの試験受けてvbaスタンダードに合格したけど、
これ実際にvbaでプログラム作れって言われても絶対作れないな。

何が言いたいかって、お前らすげーわ。
デフォルトの名無しさん [sage] 2018/10/21(日) 11:55:37.97:ENQ8JUj5

ハートもないやつがなにいってる
デフォルトの名無しさん [sage] 2018/10/21(日) 12:30:29.51:jhIwJ9RB
vbaで色々ツール作ってるけど、自分しか使わないっていうので設計雑になっちゃう。
後の機能追加等考えるとクラスモジュール使って役割ハッキリさせた設計が良いんだろうけど、結局書くのが楽な手続き型チックになっちゃうのよね
デフォルトの名無しさん [sage] 2018/10/21(日) 14:12:47.07:895e0oJn

それは別に反省ポイントじゃない
デフォルトの名無しさん [sage] 2018/10/21(日) 14:42:48.38:3rYBWp0g
自分を省みるのは良いことだよ
デフォルトの名無しさん [sage] 2018/10/21(日) 17:38:59.00:PQvzxFzP
VBAはコードのスタイル云々以前に存在自体が基本的に悪なので、実務においてはいかに使用を最小限にとどめながら要件を満たすかが最も重要だよ
VBAがあるだけでメンテができる人が数十分の一になるんだから
デフォルトの名無しさん [sage] 2018/10/21(日) 18:02:16.30:97mpJlTr
VBA撲滅委員会でも作ってその会長にでもなれ
デフォルトの名無しさん [sage] 2018/10/21(日) 18:14:38.25:PQvzxFzP

別にVBAで飯食ってる人を批判するつもりはないよ。
プログラミングにおいての言ってるような適切なモジュール化(VBのModuleではなく広義のモジュールだぞ、念のため)を行う目的は、メンテナンス性を良くすることだ。
そして、Excelのメンテナンス性を高める最善の方法は、VBAのコードを綺麗に書くことではなく、VBAの使用を極力控えることだ。
VBAのメンテナンス性を高めようという発想は根本的に矛盾してるんだよ。
デフォルトの名無しさん [sage] 2018/10/21(日) 19:06:18.04:jhIwJ9RB
VBAの存在が基本的に悪という理由って何だ?
文面から見て、メンテできる人(使用者)が少ないからという風に捉えているんだが…
もしそれが理由ならば、職場によるのではないか?
デフォルトの名無しさん [sage] 2018/10/21(日) 19:13:25.11:jhIwJ9RB
ただ、以前にマクロを修正する案件をやった時
初めて他者の書いたコードをしっかり見ることになったが…まぁ見辛いし目的が捉えづらく苦労した。
ろくなドキュメントも残っていなかったしね。
でもそれは、コードの改善や仕様書をしっかり残せば解決する問題であって、決して言語そのもののせいではないと私は思っているよ。
デフォルトの名無しさん [sage] 2018/10/21(日) 19:36:36.64:MDetJiiM
言語や開発環境が悪いからユーザーが集まらない
言語や開発環境が悪いからユーザーが育たない
言語や開発環境が悪いから汚いコードが作られやすい

全てとは言わないが大きな影響力を持ってるのは否定できないな
デフォルトの名無しさん [sage] 2018/10/21(日) 19:54:07.49:y1r4bkf6

言うてもそんなに長くならないので、コメントさえしっかり書いておけば大丈夫だよ
デフォルトの名無しさん [sage] 2018/10/21(日) 20:57:14.28:Mf4U6jjq
Pythonを使える環境ならPythonでExcelを操作できるようになっといたほうが将来的に有意義なんですかね
デフォルトの名無しさん [sage] 2018/10/21(日) 21:27:31.42:y1r4bkf6

何を目指すかによる
プログラマーならexcelはまず触らない
事務職ならpythonを触らない
両方知っておくことは悪いことじゃないが、どっちっつかずになりそう
デフォルトの名無しさん [sage] 2018/10/21(日) 21:55:52.80:Df7SvDdo
知恵遅れに毎日60以上ののVBA低レベ質問が恒常的に続くのは、商業科がExcelを教科に入れてるせいか?
VBA、大学教養のC課題、ネトゲーマーのUWSC自動化の三馬鹿うんざりトリオをなんとかして欲しい
デフォルトの名無しさん [sage] 2018/10/21(日) 22:00:53.93:y1r4bkf6
無視したら
デフォルトの名無しさん [sage] 2018/10/24(水) 20:08:02.64:VKzyLxGu
どうせ半年後は.jsになってるんだし
デフォルトの名無しさん [sage] 2018/10/24(水) 21:19:25.29:I9F6CV18
昔アセンブラやってたけど
今はアセンブラの知識なんて
まず糞の役にもたたない
悪いことは言わないから
IL止まりにしておいて
残りの時間を他の言語の学習に回した方がいい
デフォルトの名無しさん [sage] 2018/10/24(水) 23:52:56.26:PFCPc8y/
VBAってWinAPI 使えるんだな
入力もエクセルのシート利用できるし使いがっていいなこれ
自分だけ使うものはこれで十分な気がしてきた
デフォルトの名無しさん [sage] 2018/10/25(木) 00:03:26.58:lvTxqVIL
二次元配列に入力できるってかなり神がかってると思う
デフォルトの名無しさん [sage] 2018/10/25(木) 08:52:35.61:VGA0KlB2
何を二次元配列に入力できる事が神がかってるの?
デフォルトの名無しさん [sage] 2018/10/25(木) 09:32:39.27:r31i+JfI
人間が抽象化なしで無理なく扱えるデータは二次元の表までなのは確かだな
特別な技能を持たない人間の能力的限界がExcel
デフォルトの名無しさん [sage] 2018/10/25(木) 11:20:28.64:Poeqy0yu
行(列)をベクトルだとみなすと何次元にでもなるでしょ
テンソル入れ物にするメリットってあるか?
レベル上がると有益になるのかな
デフォルトの名無しさん [sage] 2018/10/25(木) 18:41:01.78:lvTxqVIL
>752
文字列と数値。ってかこれ以外セルには入れられないでしょ。オブジェクトは入れられないし
デフォルトの名無しさん [sage] 2018/10/26(金) 00:13:09.54:Inq2or/E
何を〜に入力できる?
って質問に対して間違っちゃいないが...
デフォルトの名無しさん [sage] 2018/10/26(金) 01:08:48.00:SUBF4wRe

変数型のことじゃなくて、どんな
データかって意味じゃね?
デフォルトの名無しさん [sage] 2018/10/26(金) 07:12:48.70:xKW3LLWl
セルって単語が後出しだからこうなるんだよ
デフォルトの名無しさん [age] 2018/10/26(金) 08:36:50.37:QS/Z6hlA
わかるなら聞くなよハゲども
なんでハゲてるか自問してろ
デフォルトの名無しさん [sage] 2018/10/26(金) 10:34:09.86:FHu9JUdN

当然だがWinAPIだけじゃなくVB呼び出しに適う任意のAPIが呼べるから、自分だけの環境なら何だって可能
デフォルトの名無しさん [sage] 2018/10/26(金) 10:45:47.31:REmVcuAB
解凍・圧縮用のdllであるunlha32やらunzip32なんかもちゃんと用意されていて、vbaから利用できるしな
デフォルトの名無しさん [sage] 2018/10/26(金) 12:00:29.68:FHu9JUdN

え、ないでしょ?
あるんだっけ?
デフォルトの名無しさん [sage] 2018/10/26(金) 13:41:39.22:FXq8Nzbn
「自分だけの環境」の話だろw
デフォルトの名無しさん [sage] 2018/10/26(金) 20:18:33.42:7acxRmxq
それ言い出すとシェル呼び出してそこから外部プログラムの実行でなんでもできるわな
デフォルトの名無しさん [sage] 2018/10/27(土) 00:10:36.89:64tA3ZzD
それだと最早Excel VBAを起点にする意味がないんだよなぁ
デフォルトの名無しさん [sage] 2018/10/27(土) 09:39:45.10:z1SsyyeN
戻り値主体の関数的な使い方がしにくいのでは?
デフォルトの名無しさん [] 2018/10/27(土) 12:17:32.77:nqyfF+/M
なんで何でもできたら悪いみたいな言い方やねん
デフォルトの名無しさん [sage] 2018/10/27(土) 15:13:38.94:gKMunlkh
彼女の作り方がわからない
デフォルトの名無しさん [sage] 2018/10/27(土) 17:08:31.91:arx5iKp2
事務の女性をお得意のVBAで助けてやるんだ
デフォルトの名無しさん [sage] 2018/10/27(土) 20:08:09.98:9XazvJsa
助けてあげても一瞬感謝されるだけで何も起こらないぞ
下手すると感謝すらされない
デフォルトの名無しさん [sage] 2018/10/27(土) 21:27:07.52:EQmtOnig

そう、気づかないんだよな・・・
デフォルトの名無しさん [sage] 2018/10/27(土) 23:46:47.86:bYiR1b6u
助けても後出しで本当はこうしたいのにできてないだの文句言われる
デフォルトの名無しさん [] 2018/10/28(日) 06:55:12.79:xmv6f/Y+
全然助けれとらんやんwプロさんあわれwww
デフォルトの名無しさん [sage] 2018/10/28(日) 09:41:11.55:U+AZbxUR
ちょっとしたことでいいからピンポイントで教えてあげる。
食いついてこなかったら諦める。
デフォルトの名無しさん [sage] 2018/10/28(日) 10:40:54.72:o08My3f7
ExcelVBAで、女にもてるようになる方法スレ w
デフォルトの名無しさん [sage] 2018/10/28(日) 11:02:16.86:eT9vyE0h
ランダムアクセスファイルでデータ管理をしています。
いままで動いていたものが GET PUT で 「レコード長が一致しない」となります。

一部こんな感じです。
Const MONTH_SIZE As Long = 60
Type M_Rec
S_code As Long
Stock As Long
byCode As String * 8
M_id_Cre(MONTH_SIZE) As Integer
End Type
Public S_MAIN_REC As M_Rec

Open FileName For Random As #SmainNO Len = Len(S_MAIN_REC)
Get #SmainNO, indexNo, S_MAIN_REC

この標準モジュールを破棄して同じモジュールをインポートすると
正常に動きますがワークブックを保存して再起動し同じ処理をすると
エラーになります。
Public S_MAIN_REC As M_Rec の 記述場所を移動させると正常に
動きましたがモジュール内に新規プロシージャを追加したらまた
エラーが出るようになりました。
モジュールが壊れていると思い新しく作成しても同じでした。
ご意見お願いします。
現在ユーザ定義 の M_id_Cre(MONTH_SIZE) As Integer の配列を
61に変更し正常動作中です。
デフォルトの名無しさん [sage] 2018/10/28(日) 11:41:59.08:THaxkhg7
さすがに時代遅れにも程がある
そんな黴の生えたゴミカスは今すぐ捨てて普通にワークシートで管理するかDBにしろ
デフォルトの名無しさん [sage] 2018/10/28(日) 15:41:48.78:9UvKiQNH
言い過ぎ。しかしランダムアクセスファイルとは懐かしい
776 [sage] 2018/10/28(日) 16:59:37.36:eT9vyE0h
すみません
もともとはワークシートで管理していたのですがファイルのほうが
都合が良いので変更しました。
デフォルトの名無しさん [sage] 2018/10/28(日) 17:01:07.70:ISWax1Kh
で、今まさにその前提が間違っていたことが判明したんだろ?
直ちに戻しなさい
デフォルトの名無しさん [] 2018/10/28(日) 20:08:41.54:4pkRNiip
馬鹿の特徴

動きません
エラーが起きます

決して具体的なエラーメッセージを書かない
デフォルトの名無しさん [sage] 2018/10/28(日) 21:40:15.40:uzLWPyey
バカの特徴
書いてあるエラーメッセージを理解できずに自爆 w

> GET PUT で 「レコード長が一致しない」となります。
デフォルトの名無しさん [sage] 2018/10/28(日) 23:30:32.75:9UvKiQNH
ここの住人回答者は居丈高だからteratailにでも質問なさい。
ただコード具体例とエラー詳細はいずれにせよ求められるけど
デフォルトの名無しさん [] 2018/10/29(月) 00:30:55.69:4Xu2UR6y

馬鹿は表面的なことしか見えない
デフォルトの名無しさん [sage] 2018/10/29(月) 04:51:38.42:xpZzwKyb

表面的なことすら見えてないバカの自爆乙 w
デフォルトの名無しさん [sage] 2018/10/29(月) 09:45:00.02:uMisuGYK
初心者には環境とかエラーの詳細な条件を明記することへの心理的な障壁があります
その心理の正体は一体何でしょう?
デフォルトの名無しさん [sage] 2018/10/29(月) 10:53:33.28:VYDzXbvz
慣れの問題かと
・自信ないのでミス指摘されたくないなどの自尊心問題
・コンプライアンスリスクとの取り違え
・個人情報リスクとの取り違え
776 [sage] 2018/10/29(月) 11:24:48.23:aqnyYxuj
少し荒れてしまいましたね、すみません

エラーは書いてあるとおり「レコード長が一致しない」
Openステートメントで指定された長さと異なるということなのですが
レコード変数やOpen Get Putのプロシージャなど変更せずに
このエラーが発生しました。多分VBAのバグだと思うのですが
詳しい方に教えていただきたく思いまして書き込みしました。
タイミングが悪かったですね。
デフォルトの名無しさん [sage] 2018/10/29(月) 11:33:02.57:f3zS/Ojj
確かにタイミングが悪かったな
20年遅いわ
今回お前が苦労して解決しても後で他の誰にも分からないんだぞ?
そんなもん押し付けられる方の身にもなってみろ
デフォルトの名無しさん [sage] 2018/10/29(月) 11:45:30.06:uMisuGYK
「VBA ファイル読み書き」で検索してOpen コマンドとかが出てくるものかねえ
デフォルトの名無しさん [sage] 2018/10/29(月) 11:48:12.61:VYDzXbvz
?出てくるぞ?あたりまえだろ
デフォルトの名無しさん [sage] 2018/10/29(月) 14:25:31.25:gsxtgvfG
>多分VBAのバグだと思うのですが

まぁ言語の方に責任を押し付けたくなるのは判るがなw
デフォルトの名無しさん [age] 2018/10/29(月) 15:23:05.64:P7hlr/PN
何わろとんねん
デフォルトの名無しさん [sage] 2018/10/29(月) 16:45:28.78:gkooAort

バイナリエディターでレコードファイルを確認するのと、テスト環境作ってレコードを減らしても発生するかみる
デフォルトの名無しさん [age] 2018/10/29(月) 18:06:20.39:P7hlr/PN

頼む
776 [sage] 2018/10/29(月) 19:56:48.16:aqnyYxuj

エラーになる状態ですと、新規にファイルを作成しても1レコード目でエラーとなりますので
ファイルがおかしいとは思えません。ユーザー定義のレコードサイズ、モジュール変数の
メモリ設定があやしいと思うのですが。
デフォルトの名無しさん [sage] 2018/10/29(月) 23:29:14.96:cO8xV5Br
素人質問ですみません
エクセルで消費税を算出したいのですが、一つのセル内で完結できないでしょうか
ググっても税抜き価格と税込み価格の、二つのセルを使うものばかりでして
デフォルトの名無しさん [sage] 2018/10/29(月) 23:52:48.29:g/o5tBon

まさかな、と思ってぐぐってみたら本当だった。
しかもqiitaの新着記事にもそんなのあるし。

なぜなのか?
デフォルトの名無しさん [sage] 2018/10/30(火) 00:03:25.38:oqjX6NBU

最小条件での動作確認しないなら俺はなにもいわない
デフォルトの名無しさん [sage] 2018/10/30(火) 00:10:19.82:iPJEDoz1

それVBAの質問なの?そもそも

勢い5万以上のスレをメールでお知らせするサービス、実施中!!
憧れボディをGETしたい!その夢、ボニックで!

新着レスの表示

2ch勢いランキング アーカイブ プログラム板ランキング

凡例:

レス番

100 (赤) → 2つ以上レスが付いている
100 (紫) → 1つ以上レスが付いている

名前

名無しさん (青) → sage のレス
名無しさん (緑) → age のレス

ID

ID:xxxxxxx (赤) → 発言が3つ以上のID
ID:xxxxxxx (青) → 発言が2つ以上のID

このページは2ch勢いランキングが作成したアーカイブです。削除についてはこちら