Excel VBA 質問スレ Part54

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/05/26(土) 20:37:37.74ID:Lty78diJ
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK


最近プロによる書き込みが多々見うけられますが
彼らに絡むと話がこじれるので質問したい方は適当にスルーしてください


※前スレ
Excel VBA 質問スレ Part53
http://mevius.5ch.net/test/read.cgi/tech/1524823358/
2018/06/02(土) 20:53:37.92ID:LvKjABpY
Excelもマクロも嫌いだけど仕事だから仕方なく使ってる
親のコネでやっと入ったバイトだからやめるわけにもいかない
5chに愚痴を書き続けるしかない人生
107デフォルトの名無しさん
垢版 |
2018/06/02(土) 21:09:15.11ID:A4SZL/oE
エクセル嫌いって意訳するとバカだよ?
2018/06/02(土) 21:17:48.08ID:msgJi+IZ
>>105
集団で働く以上は嫌でも周りの風習・伝統に合わせないとネ
チームや客がエクセルを使ってたらエクセルを使わざるをえないだろう
マネージャさんや手動テスト要員のアルバイタなど関係者がみんなITのプロとは限らないのでこれは仕方がない
もちろん個人端末にはエクセルをインストールすらしてない(というかそもそもLinux)
オープンソースやプライベートのプロジェクトでエクセルを使う理由は全くないからネ
109デフォルトの名無しさん
垢版 |
2018/06/02(土) 21:27:22.06ID:A4SZL/oE
オープンソースやプライベートのプロジェクトがないやんwバカw
110デフォルトの名無しさん
垢版 |
2018/06/03(日) 15:56:25.38ID:I9+zO1Pn
>>108
Excelをバッスィーンと窓から放り投げ、貴様らのような雑魚と一緒に仕事はできん!、颯爽とLinuxの国へ向かうというのはどうか。
111デフォルトの名無しさん
垢版 |
2018/06/03(日) 16:00:02.23ID:I9+zO1Pn
表やリストから抽出したデータを加工してソースの一部にするのは良くありがちなので、プログラマこそExcel使いこなすべきだと思うけどなあ。
その表がExcelならもちろん、HTMLのテーブルであっても容易に取り込めるのがExcelの良いところなわけで。
112デフォルトの名無しさん
垢版 |
2018/06/03(日) 16:04:40.23ID:I9+zO1Pn
昔よくExcelは雑魚の道具、真のプログラマはSedとAwkを使う!とか言ってる人いたけどさ。
そんなものこねくり回してる暇あったら、Excel使ってマウスでちょちょいとやれば済むことなんだよね。
やったことの過程がシートに残る、結果ももちろん残る、すべて残る、そして渡せる。
これはとても素晴らしいことなのです。
2018/06/03(日) 16:09:07.25ID:acSSis/X
>>111
テーブルデータはcsvか次点でjsonあたりでいいよ
ベンダロック強いエクセルはプログラマには合わない
2018/06/03(日) 16:13:34.70ID:acSSis/X
>>112
ソースデータとコマンドがテキストで全部残ってバージョンコントロールできる方が良いだろ

つか渡せるのはエクセル関係なくね?
エクセル以外は転送禁止的な規約があるのかな
115デフォルトの名無しさん
垢版 |
2018/06/03(日) 16:32:48.59ID:I9+zO1Pn
そりゃExcelを使ったことのない人の感想だわ。
使ってて使いづらいというのはわかるんだけど、使ったことないけど使いづらいって人が多くて困るわ。
116デフォルトの名無しさん
垢版 |
2018/06/03(日) 16:33:58.69ID:I9+zO1Pn
俺はソースツリーに.oneと.xlsxを含めてる。
2018/06/03(日) 16:51:51.67ID:acSSis/X
日常的な繰り返し作業ならシェル開いてコマンド打った方が楽なんだよな
たとえばだけど表形式のデータからgetterをコード生成したいなぁって思ったら
import-csv -path "props.csv" | % {
"public $($_.Type) get$($_.Name)() { return $($_.Name); }" }
って1行打つだけじゃん?
エクセルだとキーボードとマウスでガチャガチャやらんといかんしデータもcsvからシートにインポートしなきゃならん
めんどくさすぎ
118デフォルトの名無しさん
垢版 |
2018/06/03(日) 16:55:04.61ID:I9+zO1Pn
csv作るまでの過程で、Excel組は帰ってるんじゃ?
2018/06/03(日) 17:20:04.55ID:Gx0//w9G
>>117
psのcsv読み込みは#混ざってるとデータ消えるって本スレでやってるじゃん
1行どころか使い物にならない
120デフォルトの名無しさん
垢版 |
2018/06/03(日) 17:42:02.20ID:acSSis/X
>>119
確かにそれは意味不明な仕様だけど実用上困る事はないよ
import-csvは#あっても消えないし
catからConvertFrom-Csvに繋げたいならrawオプションをつければいい
任意のコマンド結果をConvertFrom-Csvに繋げたいならOut-Stringを挟めばいい
エクセルで作業する忍耐力があるならカンタンだな
2018/06/03(日) 20:11:49.73ID:s2wbfJiQ
なにかいい入門書を教えてください
入門者のexcel vbaという本は、簡単でしたので、次のステージに行きたいです
122デフォルトの名無しさん
垢版 |
2018/06/03(日) 20:15:21.48ID:VNTSxEkE
VBAなんか本いらん。ネット情報だけで充分過ぎる
とにかく色々かけ。そして作れ
2018/06/03(日) 20:18:59.73ID:s2wbfJiQ
>>122
レスありがとうございます
満員電車電車移動中に勉強したいので、本がいいのですよね
124デフォルトの名無しさん
垢版 |
2018/06/03(日) 20:27:55.57ID:SlIjCdRC
オープンソースソフトのコードでも読めばいい
2018/06/03(日) 20:30:05.13ID:S2iQzlDr
>>119
このスレで他ツールのCSVの取り扱いにケチつけるとかギャグか何か?
世界で一番CSVぶっ壊してるの間違いなくExcelだぞ
2018/06/03(日) 22:06:41.01ID:lMiKI+DC
    A
1 2018/04/23
2 2018/04/25
3 2018/05/10
4 2018/05/28
5 2018/06/03←今日

のようなデータがあるとき、昨日以前で直近の日付のある行を取得したい場合のコードを教えていただけませんでしょうか?上の例の場合、4行目となります。
127デフォルトの名無しさん
垢版 |
2018/06/03(日) 23:50:05.19ID:93wz4odI
countaで最大値を取って-1した行を取れば良いんじゃないか?
2018/06/03(日) 23:54:48.25ID:lMiKI+DC
>>127さんお返事ありがとうございます。
ただ、それだと5行目がない場合に3行目が返されてしまいますよね。今日の値があるなしに関わらず昨日以前の値がほしいのです。
129デフォルトの名無しさん
垢版 |
2018/06/04(月) 00:08:16.94ID:cqmMIC0b
>>128
行数を取得したいのか、それとも値(シリアル値)を取得したいのか。
日付データは当然、昇順ですよね?
130デフォルトの名無しさん
垢版 |
2018/06/04(月) 01:09:49.39ID:+i+iliGK
グラフの判例項目を足したり削除したりしたいのだがムズイ
マクロの記録で録ったのを流用してもうまくいかない時があって難儀してるわ
2018/06/04(月) 01:25:33.02ID:kEjObzvD
>>126
これは普通にmatchでいけるよね。
バイナリサーチモードで。
2018/06/04(月) 01:48:09.18ID:MwVvuTht
>>129
何行目にあるのかを知りたいのです。
昇順です。
2018/06/04(月) 03:29:47.34ID:6ovK7Hcq
>>132
r = Cells(Rows.Count, 1).End(xlUp).Row
If Cells(r, 1) = DateValue(Date) Then r = r - 1
134デフォルトの名無しさん
垢版 |
2018/06/04(月) 08:28:12.92
>>133
ニホンゴムズカシイネ^^
VBAよりまず読解力
135デフォルトの名無しさん
垢版 |
2018/06/04(月) 08:41:42.44ID:LccEMra2
もうすぐ廃止されるかもしれんVBAを本気で覚えようとするモチベが湧かないわ
2018/06/04(月) 08:49:17.91ID:gQR1ea5z
元々本気でやるようなもんじゃないし
2018/06/04(月) 09:31:05.61ID:cQm3JdMi
本当ならめでたいことだが
VBA廃止ってどこ情報だよ
2018/06/04(月) 09:38:25.44ID:96TokWOq
C#になるんだろ?
2018/06/04(月) 09:40:53.06ID:32OfKner
Pythonがどーたらって噂のことだろ?
2018/06/04(月) 09:58:55.52ID:CihK088i
python使いたいならLibreOffice使えば?
141デフォルトの名無しさん
垢版 |
2018/06/04(月) 11:44:27.43
>>140
お前が顧客提案資料作れや
142デフォルトの名無しさん
垢版 |
2018/06/04(月) 12:59:52.11ID:qohlpDZb
>>132

dim i as integer
i=1
do
i=i+1
loop while cells(i,1) < date
msgbox i-1

エラー処理とからは無しだけど。
2018/06/04(月) 13:05:50.36ID:cQm3JdMi
最終的にPDFにして送るんだからExcelにこだわる意味って…
144デフォルトの名無しさん
垢版 |
2018/06/04(月) 16:51:56.13ID:WB6Snd/w
年賀状やチラシ作りに便利だから。
145デフォルトの名無しさん
垢版 |
2018/06/04(月) 16:53:08.76ID:WB6Snd/w
昔の職人さんが包丁一本で生きていけたように、今はExcel一本あれば世界中どこでも生きていけるからな。
2018/06/04(月) 22:01:00.33ID:6ovK7Hcq
>>145
1行目に入ってる項目名がスワヒリ語だったとしても?
2018/06/05(火) 00:37:41.87ID:kmw96iJg
オブジェクト指向追加すればそれでいいよ
2018/06/05(火) 08:34:48.88ID:G/CEeCgW
フォルダ内にあるファイルがそれぞれどんな中身なのか、一つづつプレビューか開くかしないと判らず死にそう

1つずつ開いてスクリーンショット取らせるようにマクロ組んでみたけど、タイミング、ウインドウ表示の問題で上手く回収出来ないみたい
2018/06/05(火) 08:58:15.69ID:UBCugO63
何でもかんでも1つのブックに詰め込むからそれが何のためのブックなのか曖昧になる
そうなると適切なブック名を付けられなくなって中身が分からなくなるしエクスプローラーで見たときの検索性も低くなる

そしてエクセル使いはファイル数が少ない方が良いと言ってシートを増やしまくる傾向がある
チームでエクセルを使うならこのストレスには耐えるしかない
民主主義では数が多い方が正義だからね
2018/06/05(火) 09:44:50.81ID:c3HnIfO1
エクセルは、データとスクリプトを分離しろ。
151デフォルトの名無しさん
垢版 |
2018/06/05(火) 09:48:35.29ID:thULTm5+
今でもデータを別ファイルでもDBにしてもアクセス出来るじゃん
2018/06/05(火) 10:06:06.95ID:c3HnIfO1
出来る。のと、そうなっている。の違いは大きいよな。
153デフォルトの名無しさん
垢版 |
2018/06/05(火) 10:43:20.56ID:thULTm5+
だからそうすればいいじゃんって事
2018/06/05(火) 12:46:41.22ID:UEKC9tNA
馬鹿が使えは何でも無茶苦茶になる
2018/06/05(火) 13:41:23.77ID:CXAeseow
どこで聞いたら良いのかわからないのでここで…
4Kモニタ買ってDPIいじったらExcelのオートシェイプが歪んで印刷されるようになりました
この歪み具合というか補正係数みたいなのを導き出す方法ってありますか?
2018/06/05(火) 16:11:31.88ID:aRuW/xf4
縦にズラーっと1000以上データが入ってて
5回以上同じ値が連続するセルを色づけするvbaを作って貰えませんか?
入力ごとに自動実行してくれるとなおありがたいです
2018/06/05(火) 16:50:03.63ID:UEKC9tNA
>>156
死ねよ
2018/06/05(火) 17:47:42.14ID:+pFd5tY5
>>156
失せな
2018/06/05(火) 17:57:49.85ID:+rDnwov8
〜〜が出来ずに困っています、何かヒントをいただけたら有り難いのですが

と言ったら別に頭にこないだろ。作ってもらえませんかと言われただけで死ねとか失せろと言うのは、
表現だけに拘った愚かな対応だな。
160156
垢版 |
2018/06/05(火) 18:54:06.81ID:aRuW/xf4
すいません端折りすぎました
ほとんど自力で作成はできてるのですが、
判定させるほぼ全てのセルに計算式が入っていて、見かけ上は空白セルでも計算式の入ってる所は全て同じ値判定になって困っているのと
自動実行のやり方が分からないといった感じです
161デフォルトの名無しさん
垢版 |
2018/06/05(火) 18:58:20.64ID:thULTm5+
>>160
ランサーズとかに発注したら
162156
垢版 |
2018/06/05(火) 19:01:53.33ID:aRuW/xf4
質問の仕方を間違えたみたいで申し訳ありません
自分のレスは忘れてください
スレ汚し済みませんでした
163デフォルトの名無しさん
垢版 |
2018/06/05(火) 20:09:13.45ID:NEmYpB3L
>>156
http://www9.plala.or.jp/siouxsie/excel/date06.html
164デフォルトの名無しさん
垢版 |
2018/06/05(火) 20:14:15.59ID:2NfSKm9E
>>163
これはネタなのか?文字化けなのか?
2018/06/05(火) 21:08:08.34ID:wUJpbb1/
すげぇ 片手に余るレスでお客さん追い返してやんの
桜井佐那(戸田恵梨香)が来る前の崖っぷちホテルか
>>158 がくっきー(野生爆弾)の顔で睨んだとイメージ
2018/06/05(火) 21:50:13.58ID:c4uzLsyW
>>156
作りかけのファイルアップしてくれたら何とかできるかも。

イベントの条件など、その人にしか分からないことが多いから自分でコード書くのが一番いいんだけど。例えばA列限定なのか、A列からJ列なのか、全ての列なのかでコードは変わってくるでしょう?
データも、縦方向に連続しているのか空白があるのか、空白が5行続いた場合どうするのか、空白と0を区別するのか、などなど。

あと、ここよりエクセル総合質問スレの方が親切な気がする。
167デフォルトの名無しさん
垢版 |
2018/06/05(火) 22:13:04.46ID:OTFnbEJY
つーかそんだけ条件はっきりしてんならちょっと考えたらわかるやろ。しかもほとんど自力でって言ってんだし
2018/06/06(水) 01:08:15.90ID:E+CHUf1c
>>160
見かけ上は空白セルということは実際の値は何でしょうか、例えば文字列""であるとか。
自動実行は>>163のURLが分かりやすいですが、もし文字化けしているのならばWorkSheet changeで調べると良いかと思います。
2018/06/06(水) 04:28:37.07ID:CT76euXG
>>164の意味がわからない
うちでは>>163のリンク先は普通に見えてるけど、文字化けして読めない環境の人もいるってこと?
2018/06/06(水) 08:35:29.70ID:dirBD7kG
質問
再利用性高いプログラム書いたとしてそれをどこに保存してどう活用するの。
例えば〇〇出来るマクロ作れ!言われてファイル開く部分は前作ったsubプロシージャで良いなと思っても今は前のソースからコピペしてる
クソなことしてる自覚はあるけどどうすればクソ脱却するか分からん
2018/06/06(水) 08:41:20.51ID:1qUEGpfN
>>169
MIMEの文字コード種別の記述と実際の文字コードが違うとかあると、ブラウザによっては文字化けするよ。
172デフォルトの名無しさん
垢版 |
2018/06/06(水) 09:47:21.88ID:zTT9nffr
>>169
lPhoneのJanestyle アプリで開いたから文字化けしてた
流れ的に高度なネタなのか判断が出来なかったので
173デフォルトの名無しさん
垢版 |
2018/06/06(水) 10:32:45.85ID:cIbpUMGv
>160
計算式が入っているってどういうことだろう
2018/06/06(水) 10:47:00.30ID:E+CHUf1c
>>170
Runで呼び出すのはどうでしょう
2018/06/06(水) 11:44:10.21ID:EAoXenc1
>>169
原因は>>171なんだろうけど大抵のブラウザはMIME無視して文字コードを指定して表示する方法がある
そんなことも知らないで>>164みたいなレスする奴のレベルは知れてるから相手しなくていいよ
2018/06/06(水) 12:12:22.29ID:gabeefJ7
>>170
C#かVB.NETでCOM dllを作ってシステムに登録
ブックから参照の追加で↑を再利用
かな
addinでもいいんだろうけど使いにくかったので俺はaddinの利用をやめた
2018/06/06(水) 13:14:46.89ID:1VAtV2oI
>>176
addinてなんだっけ?
自分はexamの運用で特に不自由感じてないけど、使い方によってデメリットあるのかな
2018/06/06(水) 14:59:12.02ID:Loe1X+88
クッソ、さっきから頭の中で小さな男女が楽しそうにマイムマイム踊ってやがる。
2018/06/06(水) 17:28:57.66ID:r8NrOT0a
俺なんて引き出し開けたら大名行列がいたぞ
180デフォルトの名無しさん
垢版 |
2018/06/06(水) 17:56:03.28ID:JJ061DfG
トイレの中に魔法使いがいる
2018/06/06(水) 20:52:40.89ID:qbv3xFkn
机からメス猫形ロボットが出てきた
2018/06/07(木) 00:52:14.51ID:l2af3llu
シートをコピーして名前を付けるときにすでにそのシート名が存在し、重複した場合、メッセージとして、"既にその名前のシートは存在しているのでコピーしません。"
とメッセージボックスに表示し、シートをコピーしないようにしたいのですがどのようにすればよいのでしょうか。
現状は、重複する場合、コピーの元となったシートに(2)などデフォルトで付いてしまってこまっています。
どなたか教えていただけると幸いです。
2018/06/07(木) 01:04:11.81ID:0bVyIKBb
>>182
事前に名前を取得すればいいだろ
馬鹿なの?
184デフォルトの名無しさん
垢版 |
2018/06/07(木) 01:32:35.30ID:+AIz84RJ
>>182
Private Sub hoge()
Dim title As String
Dim pro As String
Dim default As String
Dim rtn As String

On Error GoTo Errhd

ThisWorkbook.Worksheets(1).Copy after:=ThisWorkbook.Worksheets(1)
title = "シート名の入力"
pro = "追加したシート名の名前を入力して下さい"
pro = pro & vbCrLf & "キャンセルすると規定のシート名です"
default = "ここに入力してね"
rtn = InputBox(pro, title, default)
If Len(Trim(rtn)) <> 0 Then
ActiveSheet.Name = rtn 'ActiveSheetは使いたくないなー
End If
Exit Sub

Errhd:
If Err.Number = 1004 Then
MsgBox "シート名が重複してます。規定のシート名にします"
Else
MsgBox "エラー:" & Err.Description & "エラーNo:[" & CStr(Err.Number) & "]"
End If
End Sub
185デフォルトの名無しさん
垢版 |
2018/06/07(木) 06:57:02.78
>>184
VBAの前に日本語を勉強しようか
2018/06/07(木) 08:28:08.10ID:5slOqNk5
>>185
流石プロ
いう事が違う
2018/06/07(木) 08:33:39.02ID:SHzt2OxM
>>185
そだねー
2018/06/07(木) 12:07:36.63ID:iCODZEhm
>>184
文法がすげぇ
189デフォルトの名無しさん
垢版 |
2018/06/07(木) 18:44:38.31ID:7ubMCfWs
プロさんはソースコードレビューでコメントの日本語の指摘ばかりうけるので
ここで日本語の指摘して憂さ晴らししとるんやで
察してさしあげろ
190デフォルトの名無しさん
垢版 |
2018/06/07(木) 21:10:45.98ID:3qk59262
カーネルナンチャラのいみがわからん
191デフォルトの名無しさん
垢版 |
2018/06/07(木) 21:14:30.25
>>189
いやそもそも>>182の要件を一切満たしてないし

読解力はどこへ行ったのか
2018/06/07(木) 21:42:02.76ID:WN2hA1TZ
>>182
勝手に(2)になるってことは、シートのコピー自体をマクロでやってるってことかな?
1枚だけならともかく、複数シートのコピーとか考慮するとかなり難しいと思う。
1枚でも同じ名前があればコピー中止するのか、(2)になるのだけを中止するのか。
現在のコード見てみないとなんとも言えないを
193デフォルトの名無しさん
垢版 |
2018/06/07(木) 21:47:48.41ID:uqa5AZHU
foreachでシート名取得すればどうとでも出来ねーか?
2018/06/07(木) 21:50:54.59ID:G9c1fl5R
ForEachでWorksheetsコレクション回してコピー元のシート名と一致するか見れば済む話だろ
答える側のレベルも低すぎ
195デフォルトの名無しさん
垢版 |
2018/06/07(木) 22:29:02.37
For Each 回したりするくらいならこうだろ

Dim wks as Worksheet
On Error Resume Next
Set wks = Worksheets(sheetname)
On Error GoTo 0
If Not wks Is Nothing Then …(重複時の処理)…
2018/06/07(木) 22:31:47.53ID:l2af3llu
182です。
みなさんありがとうございます。
今の状況はこんなコードです。

Dim i As Long
i = Worksheets("マスタ").Range("B3").Value

Worksheets("鑑").Copy After:=Worksheets(Worksheets.Count)

Worksheets(Worksheets.Count).Name = i

というコードです。
197デフォルトの名無しさん
垢版 |
2018/06/07(木) 22:52:24.42ID:l2af3llu
こんな表を書きたいのですが、どのようにコードを書けばいいのでしょうか?
http://iup.2ch-library.com/i/i1912882-1528379316.png
198192
垢版 |
2018/06/07(木) 22:53:31.56ID:BzIZrc7A
>>196

これならcopyの前に、その名前のシートがあるか判定してアラート出せばいいでしょ。

Sub test()

Dim myShName As String
Dim myWS As Worksheet
Dim myFlag As Boolean

myShName = Worksheets("マスタ").Range("B3").Value

For Each myWS In Worksheets
If myWS.Name = myShName Then
myFlag = True
End If

Next myWS

If myFlag = True Then
MsgBox "すでにあるためコピーしません", vbInformation
Else
Worksheets("鑑").Copy after:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = myShName
End If


End Sub
2018/06/07(木) 22:53:51.61ID:l2af3llu
ごめんなさい。197はスレを間違えました。失礼しました。
200192
垢版 |
2018/06/07(木) 22:59:58.47ID:BzIZrc7A
>197

ふつうにマクロの記録でできると思います。
が、それをマクロでやる意味があるのかどうかは分かりません。
手作業でなくマクロを使いたいのはなぜ?
2018/06/07(木) 23:28:43.72ID:NUSkSgba
ID:l2af3llu
馬鹿過ぎ
2018/06/07(木) 23:43:46.34ID:DZn2zH5X
excelはめんどくせえなぁ
2018/06/08(金) 00:04:23.94ID:yxBs3du0
>>202
優しくしてねハート
2018/06/08(金) 01:15:25.48ID:4Sm8z/zL
>>196
flgを立てないパターン。
Dim sheet_name As String
Dim ws As Worksheet
sheet_name = Worksheets("Sheet1").Range("B3").Value
For Each ws In Worksheets
If ws.Name = sheet_name Then
MsgBox "alert", vbInformation
Exit For
Else
If ws.Name = Worksheets(Worksheets.count).Name Then
Worksheets("Sheet1").Copy After:=Worksheets(Worksheets.count)
Worksheets(Worksheets.count).Name = sheet_name
End If
End If
Next
2018/06/08(金) 01:45:24.10ID:r8MI6JEs
ファイルの上書き保存を禁止するマクロって組めるの?
それともファイルを開いたら自動的に複製が作られるようなのを組んだ方が楽かな
チームで1つのファイルを使ってて加筆することはあっても消す事は出来ないようにしたい
206192
垢版 |
2018/06/08(金) 02:24:44.07ID:gKLQw3te
>>205
before save イベントで、ある程度はできそうだけど、「上書き保存できないように」「加筆することはあっても消すことはできない」あたりが、ちょっと何をしたいのかよく分からないですね。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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