X



Excel VBA 質問スレ Part54

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


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


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

つか渡せるのはエクセル関係なくね?
エクセル以外は転送禁止的な規約があるのかな
0115デフォルトの名無しさん
垢版 |
2018/06/03(日) 16:32:48.59ID:I9+zO1Pn
そりゃExcelを使ったことのない人の感想だわ。
使ってて使いづらいというのはわかるんだけど、使ったことないけど使いづらいって人が多くて困るわ。
0116デフォルトの名無しさん
垢版 |
2018/06/03(日) 16:33:58.69ID:I9+zO1Pn
俺はソースツリーに.oneと.xlsxを含めてる。
0117デフォルトの名無しさん
垢版 |
2018/06/03(日) 16:51:51.67ID:acSSis/X
日常的な繰り返し作業ならシェル開いてコマンド打った方が楽なんだよな
たとえばだけど表形式のデータからgetterをコード生成したいなぁって思ったら
import-csv -path "props.csv" | % {
"public $($_.Type) get$($_.Name)() { return $($_.Name); }" }
って1行打つだけじゃん?
エクセルだとキーボードとマウスでガチャガチャやらんといかんしデータもcsvからシートにインポートしなきゃならん
めんどくさすぎ
0118デフォルトの名無しさん
垢版 |
2018/06/03(日) 16:55:04.61ID:I9+zO1Pn
csv作るまでの過程で、Excel組は帰ってるんじゃ?
0119デフォルトの名無しさん
垢版 |
2018/06/03(日) 17:20:04.55ID:Gx0//w9G
>>117
psのcsv読み込みは#混ざってるとデータ消えるって本スレでやってるじゃん
1行どころか使い物にならない
0120デフォルトの名無しさん
垢版 |
2018/06/03(日) 17:42:02.20ID:acSSis/X
>>119
確かにそれは意味不明な仕様だけど実用上困る事はないよ
import-csvは#あっても消えないし
catからConvertFrom-Csvに繋げたいならrawオプションをつければいい
任意のコマンド結果をConvertFrom-Csvに繋げたいならOut-Stringを挟めばいい
エクセルで作業する忍耐力があるならカンタンだな
0121デフォルトの名無しさん
垢版 |
2018/06/03(日) 20:11:49.73ID:s2wbfJiQ
なにかいい入門書を教えてください
入門者のexcel vbaという本は、簡単でしたので、次のステージに行きたいです
0122デフォルトの名無しさん
垢版 |
2018/06/03(日) 20:15:21.48ID:VNTSxEkE
VBAなんか本いらん。ネット情報だけで充分過ぎる
とにかく色々かけ。そして作れ
0124デフォルトの名無しさん
垢版 |
2018/06/03(日) 20:27:55.57ID:SlIjCdRC
オープンソースソフトのコードでも読めばいい
0125デフォルトの名無しさん
垢版 |
2018/06/03(日) 20:30:05.13ID:S2iQzlDr
>>119
このスレで他ツールのCSVの取り扱いにケチつけるとかギャグか何か?
世界で一番CSVぶっ壊してるの間違いなくExcelだぞ
0126デフォルトの名無しさん
垢版 |
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行目となります。
0127デフォルトの名無しさん
垢版 |
2018/06/03(日) 23:50:05.19ID:93wz4odI
countaで最大値を取って-1した行を取れば良いんじゃないか?
0128デフォルトの名無しさん
垢版 |
2018/06/03(日) 23:54:48.25ID:lMiKI+DC
>>127さんお返事ありがとうございます。
ただ、それだと5行目がない場合に3行目が返されてしまいますよね。今日の値があるなしに関わらず昨日以前の値がほしいのです。
0129デフォルトの名無しさん
垢版 |
2018/06/04(月) 00:08:16.94ID:cqmMIC0b
>>128
行数を取得したいのか、それとも値(シリアル値)を取得したいのか。
日付データは当然、昇順ですよね?
0130デフォルトの名無しさん
垢版 |
2018/06/04(月) 01:09:49.39ID:+i+iliGK
グラフの判例項目を足したり削除したりしたいのだがムズイ
マクロの記録で録ったのを流用してもうまくいかない時があって難儀してるわ
0134デフォルトの名無しさん
垢版 |
2018/06/04(月) 08:28:12.92
>>133
ニホンゴムズカシイネ^^
VBAよりまず読解力
0135デフォルトの名無しさん
垢版 |
2018/06/04(月) 08:41:42.44ID:LccEMra2
もうすぐ廃止されるかもしれんVBAを本気で覚えようとするモチベが湧かないわ
0141デフォルトの名無しさん
垢版 |
2018/06/04(月) 11:44:27.43
>>140
お前が顧客提案資料作れや
0142デフォルトの名無しさん
垢版 |
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

エラー処理とからは無しだけど。
0144デフォルトの名無しさん
垢版 |
2018/06/04(月) 16:51:56.13ID:WB6Snd/w
年賀状やチラシ作りに便利だから。
0145デフォルトの名無しさん
垢版 |
2018/06/04(月) 16:53:08.76ID:WB6Snd/w
昔の職人さんが包丁一本で生きていけたように、今はExcel一本あれば世界中どこでも生きていけるからな。
0148デフォルトの名無しさん
垢版 |
2018/06/05(火) 08:34:48.88ID:G/CEeCgW
フォルダ内にあるファイルがそれぞれどんな中身なのか、一つづつプレビューか開くかしないと判らず死にそう

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

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

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

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

あと、ここよりエクセル総合質問スレの方が親切な気がする。
0167デフォルトの名無しさん
垢版 |
2018/06/05(火) 22:13:04.46ID:OTFnbEJY
つーかそんだけ条件はっきりしてんならちょっと考えたらわかるやろ。しかもほとんど自力でって言ってんだし
0168デフォルトの名無しさん
垢版 |
2018/06/06(水) 01:08:15.90ID:E+CHUf1c
>>160
見かけ上は空白セルということは実際の値は何でしょうか、例えば文字列""であるとか。
自動実行は>>163のURLが分かりやすいですが、もし文字化けしているのならばWorkSheet changeで調べると良いかと思います。
0169デフォルトの名無しさん
垢版 |
2018/06/06(水) 04:28:37.07ID:CT76euXG
>>164の意味がわからない
うちでは>>163のリンク先は普通に見えてるけど、文字化けして読めない環境の人もいるってこと?
0170デフォルトの名無しさん
垢版 |
2018/06/06(水) 08:35:29.70ID:dirBD7kG
質問
再利用性高いプログラム書いたとしてそれをどこに保存してどう活用するの。
例えば〇〇出来るマクロ作れ!言われてファイル開く部分は前作ったsubプロシージャで良いなと思っても今は前のソースからコピペしてる
クソなことしてる自覚はあるけどどうすればクソ脱却するか分からん
0171デフォルトの名無しさん
垢版 |
2018/06/06(水) 08:41:20.51ID:1qUEGpfN
>>169
MIMEの文字コード種別の記述と実際の文字コードが違うとかあると、ブラウザによっては文字化けするよ。
0172デフォルトの名無しさん
垢版 |
2018/06/06(水) 09:47:21.88ID:zTT9nffr
>>169
lPhoneのJanestyle アプリで開いたから文字化けしてた
流れ的に高度なネタなのか判断が出来なかったので
0173デフォルトの名無しさん
垢版 |
2018/06/06(水) 10:32:45.85ID:cIbpUMGv
>160
計算式が入っているってどういうことだろう
0175デフォルトの名無しさん
垢版 |
2018/06/06(水) 11:44:10.21ID:EAoXenc1
>>169
原因は>>171なんだろうけど大抵のブラウザはMIME無視して文字コードを指定して表示する方法がある
そんなことも知らないで>>164みたいなレスする奴のレベルは知れてるから相手しなくていいよ
0176デフォルトの名無しさん
垢版 |
2018/06/06(水) 12:12:22.29ID:gabeefJ7
>>170
C#かVB.NETでCOM dllを作ってシステムに登録
ブックから参照の追加で↑を再利用
かな
addinでもいいんだろうけど使いにくかったので俺はaddinの利用をやめた
0177デフォルトの名無しさん
垢版 |
2018/06/06(水) 13:14:46.89ID:1VAtV2oI
>>176
addinてなんだっけ?
自分はexamの運用で特に不自由感じてないけど、使い方によってデメリットあるのかな
0178デフォルトの名無しさん
垢版 |
2018/06/06(水) 14:59:12.02ID:Loe1X+88
クッソ、さっきから頭の中で小さな男女が楽しそうにマイムマイム踊ってやがる。
0180デフォルトの名無しさん
垢版 |
2018/06/06(水) 17:56:03.28ID:JJ061DfG
トイレの中に魔法使いがいる
0182デフォルトの名無しさん
垢版 |
2018/06/07(木) 00:52:14.51ID:l2af3llu
シートをコピーして名前を付けるときにすでにそのシート名が存在し、重複した場合、メッセージとして、"既にその名前のシートは存在しているのでコピーしません。"
とメッセージボックスに表示し、シートをコピーしないようにしたいのですがどのようにすればよいのでしょうか。
現状は、重複する場合、コピーの元となったシートに(2)などデフォルトで付いてしまってこまっています。
どなたか教えていただけると幸いです。
0184デフォルトの名無しさん
垢版 |
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
0185デフォルトの名無しさん
垢版 |
2018/06/07(木) 06:57:02.78
>>184
VBAの前に日本語を勉強しようか
0189デフォルトの名無しさん
垢版 |
2018/06/07(木) 18:44:38.31ID:7ubMCfWs
プロさんはソースコードレビューでコメントの日本語の指摘ばかりうけるので
ここで日本語の指摘して憂さ晴らししとるんやで
察してさしあげろ
0190デフォルトの名無しさん
垢版 |
2018/06/07(木) 21:10:45.98ID:3qk59262
カーネルナンチャラのいみがわからん
0191デフォルトの名無しさん
垢版 |
2018/06/07(木) 21:14:30.25
>>189
いやそもそも>>182の要件を一切満たしてないし

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

というコードです。
0198192
垢版 |
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
0200192
垢版 |
2018/06/07(木) 22:59:58.47ID:BzIZrc7A
>197

ふつうにマクロの記録でできると思います。
が、それをマクロでやる意味があるのかどうかは分かりません。
手作業でなくマクロを使いたいのはなぜ?
■ このスレッドは過去ログ倉庫に格納されています

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