Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
!extend:checked:vvvvv:1000:512
スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/
※前スレ
Excel VBA 質問スレ Part49©2ch.net
http://mevius.2ch.net/test/read.cgi/tech/1498410914/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured あえて無理を承知でVBAでやるのがVBAerの心意気だろがw
VBAの貧弱な仕様に疲れてしばらくC#とPYTHONを勉強していたがそういう言語で作ったアプリを
渡しても誰も使わねえのよ。もう、日本企業では エクセル操作=業務という定義が確立していて他に許せるのは
一太郎ワードアウトルックぐらいなんだよ。窓際社員の作ったPYTHONアプリなんか信用できないんだってよWW
泣けてくるぜ・・・ >>548
そら日本のITは遅れますわ、という話やね
セキュリティに金かけられないからネット遮断したり権限締め付けたりするわけだしな >>549
スマホとタブレットの普及でPCわからないのがデフォになっちゃったからなぁ。今年4月に入社したT大出のヤツが「マクロ教えて下さい」と
言ってきたんだが内心「どんだけハイレベルな質問されるんだろ」とガクブルしてたらシート関数ですらSUMしか知らないとかそんなレベルだったんで驚いた。
講義でC言語やったそうだけど「さっぱりわからなかった」そうで。こりゃ日本やべえよ >>550
だってね、PYTHONってのはもう、dotnetやってて「こんなのがあったらいいのに」と考えるモノが全部そろってるんだよ。
俺のやってる仕事はGISなんかも使うんだが、こういうのはもうPYTHONの独壇場で、殆どコード書く必要が無いぐらい出来あいのが
充実してるのよ。EXCELに特化したライブラリもある。全体に動作がモッサリなのが難点なのと、文字コードで頭が禿げそうになる、PYTHON3系なら大丈夫かもだが。 >>553
へぇ〜〜
数学系は強いって聞いてたけど、そんな所も強いのか、ありがとう >>553
>文字コードで頭が禿げそうになる
www(ゴメン、つぼったわ) >>555
機械学習なんかで注目されているpythonがイマイチ普及しない理由はコレって言われているぐらいだからね。 >>557
いや、あのフレーズを言おうと思ったんだけど。失礼だからw >>553
GISって言ったら昔の話だがGoogle Geocoding API使ってVBAで住所→緯度経度取得は簡単に出来たな。
Yahooも出来たと思う。
xml扱えれば誰でもできる。
VBAでの簡単ってのが他言語に比較して不明だが。
ただ、それやって良いかどうかが分からん。
Webに埋め込んだりするのは良いんだろうけど、自分が情報取得する為に使って良いんだろうか。 >>559
APIは回数決まってる
それ以内ならok >>560
うん、それは知ってた。
けど、それはそれを利用したwebサイトに訪れる人数を意味してると思ってた。
Google Mapとの併用に限り認められるからVBAでの情報収集には認められないんじゃないかな。 VBA初心者です。
質問させてください。
複数ファイルに同じ文言を自動入力させたいと思いVBAで組み始めました。
ファイルを探し、開くとこまでは出来たのですが、最終行+1が上手く取得できません。
アップロードした画像ファイル(これはネットで拾ったイメージです)のような状態で最終行を取得すると、"261"行目が取得されてしまいます。
取得したいのは"258"行目なのです
どなたかコード毎サンプルを頂けないでしょうか?
よろしくお願いいたします。
https://i.imgur.com/GNoEnCb.jpg >>562
Sub foo()
Debug.Print Cells(Rows.Count, 9).End(xlUp).Row + 1
End Sub >>562
データの入ったセル範囲を取得しようとしてUsedRangeを使ったら書式設定されてる空白セルまで含まれた範囲を取得してしまったってとこかな >>563
回答ありがとうございます。
9は何の数字でしょうか?
>>564
そんな感じと思います。
ここで取得した最終行+1に別シートで入力した日付、担当者名、備考MSGを貼り付けるプログラムにしたいと思ってます。
ざっくり作ってるのはこんな感じです。
特定フォルダから、○○01.xlmsというファイルを開いて、最終行+1に別シートで入力した日付、担当者名、備考MSGを貼り付け
保存、閉じる
次のファイル○○02.xmlsを開く
ファイル名の数字は増えたり削除されたりするので、○○が含まれたファイルを順次開いていく感じにしようと思います。 >>565
この程度のことここで聞くより調べた方が早いぞ
cellsの引数も知らんの >>566
質問スレで質問したら怒られたでござるw そりゃ2次方程式の解き方聞いてる最中に"+"の記号って何ですかとか加算って何ですかと言われても困るだろう。
そこが分からなくて何で2次方程式なんだってことになる。 いや別にRangeとか基礎から聞いてもええんやが
質問のレベルにかかわらず、答える人がいるかどうかは別問題 >>567
怒ってるんじゃなくて呆れてるんだけど
まあVBAなんてえてしてそう言うものだと言えばそうなんだけどな
なんでもかんでも教えてあげるのもどうかと思うんで >>548
窓際社員瀬戸際の私はpython勉強しています(非情報システム系所属)。
そんな私はどうしたらいいでしょう?
ご教示ください。 Cellsの引数がわからないんじゃなくて
>>563の例で9列目を指定してるのはなぜ?ということでは
質問者のあげたサンプル画像がI列の最終行 + 1を赤く囲ってたから9列目としたんだろう >>572
質問者自身が9列目にした理由が分からんってことは無いだろう。
自らI列のセルを指定してるんだしさ。
9を何かの特別な数値と勘違いしたのかなとは思ったけど。 VBAでIf〜Thenの後を空行にすると次のElseIfが評価されないということは有るのでしょうか?
具体的には、
If var = 正常値 Then
ElseIf var = 異常値1 Then
(異常値の処理)
ElseIf var = 異常値2 Then
...
End If
のようなコードです。ElseIfがいくつも続くので最初に正常値にマッチしたらすぐに抜けるようにしたいのです。
最初のIfの後にブレークポイントを設定してもすり抜けているようです…
よろしくお願いします。 >>575
ないよ
他のとこ間違ってるんじゃない? >>576
ところが同じコードでIf〜の行を削除して二行目をElseIf→Ifに直したところちゃんと動いているようなのです。
最初のIfにマッチしてるということは無い筈なのですが… >>577
前後と処理の内容と何を比較してんのかわからんと答えようがない >>575
これSelect文使うべきじゃないの。 >>575
「正常値」と「異常値1」が定数か変数で同じ値とか >>577
変数が期待通りになっていないんだと思う。
ステップ実行していけば変数がどう変化しているかすぐわかるんだけど
まだデバッグを使いこなせないビギナーさんなら
msgbox var
をいたるところにちりばめて実行して
メッセージボックスで変数の変化をみるという方法があるよ
自分もデバッグ?なにそれ?なころはそうやってた >>577
Ifの次の行じゃなくて、Ifの行にブレークポイント設定して変数や定数の値を確認してみ
ブレークポイントは「その行が実行される直前で停止」だから win10 64bitでExcel2016使ってるんだけど
最近やたらに、「メモリ不足〜64bit版に〜」的なポップアップ出てフリーズするんだけど
なんかアプデで仕様でも変更したんかな どんな理由でフリーズする仕様にしなきゃならんのだ
いくらmsさんとは言え濡れ衣にも程がある >>583
2016 100台くらい扱ってるけど聞いたこと無いな。
あとofficeは64bit版出てはいるけど非推奨じゃなかったっけ Windows Defender で、フルスキャンしてウイルスチェックしろ
クイックスキャンでは見つからないので、フルスキャンしろ マクロが無限ループしているとか、バグってるのかも? とあるcsvファイル(測定器の出力でかなり細かい数値データ)があるのですが
この数値をExcelで一部変更して保存すると全体的に数値が勝手に丸まったりしてしまいます…
(変更していない数値も全て)
色々調べたのですがこのあたりは仕様?みたいなのですがなんとかならないものなのでしょうか >>589
vbaと関係なくね?
仕様ならどうしようもないじゃん
csvの中身読んでExcelに書き込んでいけばなんとかなるかもしれんけどそういうこと? >>589
お前のやり方が間違ってるだけ。
開くんじゃなくてインポートしろ。
そしてそもそもVBA関係無い。 >>589
Excelの表示(見え方)の話であって実データは変わったないのではないか?
Excelpで表示時の桁数を指定すれば正しい数値が表示されるんじゃないの >>590-592
どうもありがとう、なんとか自己解決しました
ここで聞いたのは、一応一連の処理をVBAでやっていたので…
Excelでは仕様としてcsv保存するにしても細かい数値は勝手に丸めてしまうようでした
1.00001、1.00002…と並んでいる数字もExcel上から上書き保存するとただの1になってしまいます
これはインポートしても同じ事でした
結果として修正するときは数字として扱い、保存する前に全て文字列とすることで解決しました
しかしこれでも数字の丸めを止めさせられるだけで、各所それなりに変更されてしまいます
例えば、1.00000はどうやっても1になってしまいます
あるときには便利な仕様なのかもしれませんが、やっぱり余計と思える方が大きいですね…
どうもお邪魔しました >>593
Excel 2013 の話だが
> 1.00001、1.00002…と並んでいる数字もExcel上から上書き保存するとただの1になってしまいます
再現しない
> 例えば、1.00000はどうやっても1になってしまいます
Excelで書式を設定して上書きすればいいだけ
当然csvには書式は格納されないので書式の設定は毎回必要 >>593
<csvをExcelで開き、1.00001 と表示されていた場合>
csv Excelで開く csv保存
実データ: 1.00001 → 1.00001 → 1.00001 ←丸められていない
見え方1: 1.00001 → 1.00001 → 1.00001
(Excel2007で開いたときはこのパターンで全桁表示され、丸められることはなかった)
<csvをExcelで開き、1 と表示されていた場合>
csv Excelで開く csv保存
実データ: 1.00001 → 1.00001 → 1 ←丸められた
見え方2: 1.00001 → 1 → 1
(Excel上では正確な値を保持していたが、csv保存時に丸められた)
Excelでcsv保存する場合、見えている通りにcsvに書き出されるから
正しい桁数に書式設定(桁数指定)する必要がある
(Excelのbook形式で保存するなら、丸められることなく正確な値を保存できる) >>595-596
どうもありがとう
CSVを普通にExcelで開いた時点での表示形式は指数になってます
この時点ではある意味見た目上も全桁数表示されてるのですが
csv保存するときに自動的に普通の数値に変換して更に丸めてしまうみたいです
よくわからないのは0.00001は丸められないけど1.000001は1に丸められます
Excelのバージョンは2016です
いずれにしろ表示形式を変えることで対処するしかなさそうですね
とりあえず文字列にしてしまえば全て保存できるようで何よりです
確かにxlms形式なら全て保存できるみたいなのですが
測定器がcsvで吐き出すことを前提に色々と組んでしまっているので… >>597
excelをcsvで保存するんじゃなくてtextstreamとかでcsvに吐き出すようにすれば?
意味わからん挙動をするものに関してはそこを介さないのが一番のような気がするんだが >>597
保存じゃなくてエクスポートを試してみた?
自分の記憶では保存は駄目でエクスポートなら上手くいくと思うんだが。 あれ?
何か勘違いしてたみたいだ。
>>599は忘れてくれ。 Outlookで指定したメールのtoアドレスとccアドレスをエクセルに書き込みたいのですが、itam.TOとCCにすると名前が書き込まれてしまいました。そこでTOをやめてitam.SenderEmailAddressにしたらアドレスが入ったのですがCCは見つけられませんでした。
分かる方、お言えてもらえませんか? >>601
outlook.RecipientsクラスのpropertyAccessorから、getproperty使って取り出してるけど、今はソースを提示できない。
どっかの日本語サイトから見つけたんで、頑張って探して‥ 会社で「顧客名簿のDBから吐き出したCSVをエクセルで編集して又システムに
戻したいんだけど遅いくて困ってる」と言われて「エクセルじゃなく専用エディタでやれよ」
と言ったら「勝手にフリーソフトをインストールできない」と言う。つまり、泣き付けばマクロで作ってくれると思ったんだろうな。
冗談じゃねえと思ったが興味本位でネット漁って作ってやったよ。礼の一言もなんも無しだが、何も言ってこないから普通に使えてるんかな。
CSVをエクセルに食わせるのはQueryTableが一番?速いみたいね。データ型も指定できるし。保存は保存するディレクトリにブックをコピーして
書き出すとまあまあ速かった。と言ってもせいぜい30000件程度(会社規模が知れるw)だからあんま参考にならないかもだが。 >>603
すっげえええええええええええええ!!!!!!!!!!!!!111 >>597
> CSVを普通にExcelで開いた時点での表示形式は指数になってます
なら初めからそう書いてくれ
> この時点ではある意味見た目上も全桁数表示されてるのですが
本当になってる?
Excel 2013 だから動作が違うのかも知れんが 1.23456789E+00 を読み込むと 1.23E+00 になる
> csv保存するときに自動的に普通の数値に変換して更に丸めてしまうみたいです
指数表示は全桁読み込んでるけど表示上の有効桁を3桁に決め打ちしているように見える
なのでそのまま保存すると3桁分に丸められてしまう
> よくわからないのは0.00001は丸められないけど1.000001は1に丸められます
それ指数表示でどうなってるかを見ればわかると思うが...
って言うか指数表示の意味わかってないのか? >>603
自分の担当の仕事やんないでマクロせこせこ組んでるのってどうなのかな >>603
ブックに保存のあとDB更新はどうするの? >>603
勝手にフリーソフトインストールできないのに、勝手に作ったマクロいれていいのか? >>612
逆に金もらえばフリーソフトじゃないから入れてもいいのかな >>612
上から見たら単なるExcelファイルだから 単なるexcelファイルに見えるフリーソフトならいれてもいいのか >>615
お前が決める事じゃないし、合理的な回答とか求めてないし 企業だと、Excelは書類扱いやな
マクロも同じ(Excelを加工するExcelファイルという扱い)
「Excelマクロ禁止」って書いてない企業ならまぁ合法かもな(VBSはええんやで) Excelマクロ禁止ならWordマクロを使えばいいのに 下手に素人が自動化してデータを触るとデータが消えるかもしれない!
きちんと目視で確認すること! 電卓で計算した結果を入力するのが正しい、と思い込んでる老害が幅を効かせてるんでしょ いやいや、誰もマクロ禁止とは言ってないから
フリーソフトNGでもマクロ禁止と明言されてなければOKでは?と言っているだけかと
そして答えは>>617 フリーソフトを禁止している理由として
著作権とかライセンス関係の理由なのか
ウイルスとかセキュリティ関係の理由なのか
それ以外か
複合的な理由かによるんじゃね
会社で作ったのなら著作権は問題ないだろう
ウイルスは問題無いけどセキュリティホール的な問題がある場合もありうるかなぁ ソースコードそのものは外部のものを導入しても構わない、という会社が大多数だろうから、オープンソースを探せばよい うちのお客の社員用PCでは拡張子exeのファイルは起動できない
そしてインストール権限を認めてないのでインストーラーを起動できない
この辺が必要な場合は上司を介して情報システム部に許可をとる必要がある
まぁOfficeと社内用ツール以外は使うなよって感じ
ちなみにVBAには特に制限とかかかってない様子 CSVの行頭と,の後に'を挿入してから開いたらいいのでは?
文字列化して良ければの話だけど >>628
オープンソースでもライセンスはいろいろ
オープンソースなら商用利用も可能とは言い切れない C++で自作したフリーソフトなら入れていいのか?
エクセルマクロで実行ファイルを書き換えるのはありなのか? はいはい、おやつは300円までね
バナナはお弁当箱に入っていたらお昼ご飯だけど
別に持ってたらおやつとみなすわよ >>632
会社で作ったのなら言語に依らずフリーソフトにはならないんじゃね?
自宅とかで作ったのなら従業員かどうか関係なく一般のソフトと同じ扱いだと思う
実行ファイルを書き換えた結果
会社に損害を与えたら懲戒処分とか損害賠償とかの可能性もあるんじゃね?
悪意の程度とかいろいろ関係しそう >>634
マクロでデータ書き換えるのがありで実行ファイル書き換えるのが駄目?
csvだって帳簿の金額なら損害与えることもできるよ そういう時に必要な要件は、責任の所在を明確に出来るかどうか
マクロでトラブルが起きると、作ったやつが悪いか使ったやつが悪いか、みたいな面倒な話になって、ヘタすると業務が止まって
マクロで得られた時間の短縮という恩恵以上の損失が出る可能性があるというか、禁止してる所は過去に苦い経験が
あることがほとんど
例外を認めるのもこれまた面倒だから一律禁止にしてる所も多い
会社がある程度の規模になると、本当に小回りがきかなくなるんだよ
Windowsの壁紙の変更すら認められない、みたいな職場も見てきたから >>635
実行ファイルを書き換えてはダメとは書いてないんだが
結果とか必要性とかいろいろ関係しそうと言う意味
別の手段で実現できることをわざわざその手段を使う必要があるかとか、結果の程度とか
会社に損害を与えたら懲戒処分になる可能性があるのはどんな業務でも同じ ウィルスも簡単に作れるけどね。
昔、客に納めた文書が誤検出されたことがあって、問題になりかけた。
今ならあんなマクロは納めないな。 そもそも、VBA込みの仕事が殆どじゃないの?
フリーソフトは許可が必要だろうけどVBAについては最初から込みの話であって、駄目なら最初からそういう指示がある筈だ。
フリーソフトは駄目だからVBAで同じ機能を実現すれば良い。
どうしても必要だけどVBAで作るのが難しいなら上司を説得するか有料のソフト買って貰うしかない。 HTMLやjavascriptをメモ帳で組むのは辛いからテキストエディターぐらい入れさせてほしいわねえ
ブラクラならHTAで簡単に作れるんじゃね VBAでテトリスとかロックマンが作れるなんで知らなかったわ
というか感動した。
それを実装するのに特別な環境が必要だと思ってたけど、VBAだけで実現できるところがすごい 最大限好意的に解釈すれば、exeを直接起動するのは禁止って意味ではあるまいか
Excelを起動したい時はxlsファイルをダブルクリックするしかない、みたいな >>643
つまりネット上のサンプルプログラムのコピペはOK、と ガチガチの環境だとネットも許可されたURLしかアクセスできないんだよな 開発環境の話かな?
通常のオフィス環境で特定サイトのみOKてことないよね
NGなサイトがあるのはわかるけど。 本来は未認可のプログラム関連全面禁止のところVBAが抜け道的に使われているだけって場合が多いだろうから、
他のプログラムを使ってはならないのは何故かっていう疑問に合理的な回答は無いだろうなぁ。 ■ このスレッドは過去ログ倉庫に格納されています