X



Excel VBA 質問スレ Part65
レス数が1000を超えています。これ以上書き込みはできません。
0005デフォルトの名無しさん (ワッチョイ 4901-hdmr)
垢版 |
2020/03/18(水) 04:12:39.20ID:oTsktMrB0
VBAからインターネットエクスプローラーを起動して、
指定したURLのサイトを表示して、
スクリーンショットを取って行く。
という作業を自動化したくて色んなサイトのコードをコピペして、
一応動くものは出来たのですが画質が悪いです。
下記はそのコードの一部分なんですが、どこをどういじれば
画質が良くなるのでしょうか。

Private Declare PtrSafe Sub keybd_event Lib "user32" ( _
 ByVal bVk As Byte, _
 ByVal bScan As Byte, _
 ByVal dwFlags As Long, _
 ByVal dwExtraInfo As Long)

・・・

 keybd_event &HA4, 0&, &H1, 0&
 keybd_event vbKeySnapshot, 0&, &H1, 0&
 keybd_event vbKeySnapshot, 0&, &H1 Or &H2, 0&
 keybd_event &HA4, 0&, &H1 Or &H2, 0&
0006(ワッチョイ 4901-hdmr)
垢版 |
2020/03/18(水) 05:01:35.56ID:oTsktMrB0
プラウザのウィンドウサイズを大きくした後で画面キャプチャしたら
満足の行く画質になりました。
>>5の質問は撤回します。
0009デフォルトの名無しさん (ワッチョイ 13ad-NT4g)
垢版 |
2020/03/18(水) 21:13:19.46ID:ILNBMFwG0
リボンを自動的に非表示にする設定だととクイックアクセスに登録したものも含めてコマンドがすべて隠れてしまうんだけど
特定のコマンドのみ表示させておく方法はないかな?
マクロとして登録させて画像にマクロを登録しようとしたけど動かない。
0022デフォルトの名無しさん (ワッチョイ 8b46-m7vt)
垢版 |
2020/03/22(日) 12:27:27.61ID:bv32jkb00
VBA で、セルの指定しても行の指定が無効になってて、必ず1行目に表示されてしまいます。
何が原因でしょうかね?
教えてください。
0023デフォルトの名無しさん (スプッッ Sd33-dSJs)
垢版 |
2020/03/22(日) 12:28:32.17ID:hR7PxyLud
>>22
お前の馬鹿頭
0024デフォルトの名無しさん (ワッチョイ 8b46-m7vt)
垢版 |
2020/03/22(日) 12:35:14.95ID:bv32jkb00
原因わかりました。すみませんでした。
0025デフォルトの名無しさん (ワッチョイ 8b46-m7vt)
垢版 |
2020/03/22(日) 12:36:52.15ID:bv32jkb00
ここの住民の霊性は暴力団と同じですね
0027デフォルトの名無しさん (ワッチョイ 118e-dSJs)
垢版 |
2020/03/22(日) 14:47:18.63ID:9uw1USbo0
>>25
霊性?
馬鹿確定
原因としては正しかっただろうが
0029デフォルトの名無しさん (ワッチョイ 2beb-W/ZL)
垢版 |
2020/03/24(火) 17:30:30.61ID:s99Qd4t60
よろしくお願いします。

数百行あるシートで、上から順に一行ずつ以下の操作を行いたいです。

(1) C列の文章の中に、「一言コメント:」という文字が入っていれば2へ。なければ終わり、次の行へ
(2) 「一言コメント:」とそれ以下の文字列をC列の値から削除し、E列の、元々の値(文字列)の前に貼りつけ
(3) E列の文字列の中から「「一言コメント:」という文字列を削除

以上です。
まず、(1)の検索がうまくいかず、(2)の文字列取得も、一文字ずつ数えてカウントし、あらためて「終わりから○文字」みたいな
やりかたをするしか方法が浮かびません。
たぶん、上級者ならもっとシンプルな書き方ができるのではないかと思い質問させていただきました。

どのように書けばよいでしょうか?よろしくお願いいたします。
0032デフォルトの名無しさん (ワッチョイ 8b2c-cvBQ)
垢版 |
2020/03/24(火) 18:33:24.09ID:n56XI6Ab0
>>29
Ruby で作った

text = <<"EOT"
ab一言コメント:12
あいう コメント:
xyz一言コメント:456
EOT

search_word = "一言コメント:"
sw_length = search_word.length # 7文字

text.each_line do | line | # 1行ずつ処理する
line.strip! # trim

# 単語が見つかった時だけ、単語の前後を出力する
if pos_1 = line.index( search_word )
puts "#{ line[ 0 ... pos_1 ] } - #{ line[ pos_1 + sw_length .. -1 ] }"
end
end

出力
ab - 12
xyz - 456
0036デフォルトの名無しさん (ワッチョイ 41ce-ED79)
垢版 |
2020/03/24(火) 22:01:18.60ID:PstaeSXz0
>>29
Dim c As Range, e As Range
s$ = "一言コメント:"
For Each c In Range(Cells(1, 3), Cells(Rows.Count, 3).End(xlUp))
  i% = InStr(c, s)
  If i Then
    Set e = c.Offset(0, 2)
    e = Replace(Left(c, i - 1) & e, s, "")
  End If
Next
0040デフォルトの名無しさん (ワッチョイ b1f1-Go5d)
垢版 |
2020/03/25(水) 09:15:56.68ID:nn3rUaIL0
FileSystemObjectでFilesのコレクションょ取得したあと
それぞれにアクセスするにはどうしますか?
Files(1), Files(2)のようにするとエラーが出てエラいこっちゃとなります。
For each文ならできるのですがそこまでするほどのことではない時には?
0042デフォルトの名無しさん (ワッチョイ b1f1-z4rF)
垢版 |
2020/03/25(水) 10:44:44.89ID:nn3rUaIL0
0043デフォルトの名無しさん (ワッチョイ ad49-iBrl)
垢版 |
2020/03/25(水) 10:51:51.28ID:34Te7/8G0
暇だし、見てみた

Const path = "c:\temp"
Dim fso As Scripting.FileSystemObject
Dim item As Object

Set fso = New Scripting.FileSystemObject
Set item = fso.GetFolder(path).Files.item("test.csv")

filesコレクションからの特定fileオブジェクトはitemプロパティでkeyをnameで指定すれば直接取れる
ExcelVBE上はitemでナンバリングされてるけど、配列みたいに番号指定は出来ないんじゃないかな(他の人知ってればいいな)

ファイル名特定できるならgetfileでもええね
個人的にはdirとか分かりやすいがね
0044デフォルトの名無しさん (ワッチョイ b1f1-z4rF)
垢版 |
2020/03/25(水) 12:51:44.52ID:nn3rUaIL0
itemでナンバリングされていないんじゃないか?
だからitem(1)やitem(2)で取得できないのでは。
それゃファイル名を()の中に書けば取得はできるけど。
0047デフォルトの名無しさん (ワッチョイ b1f1-z4rF)
垢版 |
2020/03/25(水) 16:09:28.13ID:nn3rUaIL0
>>45-46
このハゲー!
違うだろ!

最初にfor eachはやらないと言った。
コレクションの代表ということで任意の1個だけを選んでそのプロパティ等を調べる、
ということはプログラミング経験がある程度あればそういう状況に遭遇することはたまによくある。
0048デフォルトの名無しさん (オッペケ Sr79-iBrl)
垢版 |
2020/03/25(水) 16:14:59.17ID:z6ZaQbmPr
fsoのfilesコレクションには通常のコレクションみたいにインデックス指定が出来ないのよね
countとitem(key)プロパティしかない
ファイルシステムの違いとか、歴史的経緯からかはしらんけど
だから基本for eachで他の形にする
0049デフォルトの名無しさん (ワッチョイ b1f1-z4rF)
垢版 |
2020/03/25(水) 16:19:47.29ID:nn3rUaIL0
>>48
そんなことはとおの昔に知ってるから
ここで質問をしたのだ。
0050デフォルトの名無しさん (ワッチョイ 558e-7Ena)
垢版 |
2020/03/25(水) 16:24:52.66ID:RkpcsgMW0
ID:nn3rUaIL0
馬鹿は死ね
0059デフォルトの名無しさん (ワッチョイ b60e-vX/y)
垢版 |
2020/03/26(木) 02:21:13.92ID:THyEKc6a0
ファイル入出力に使うopenやinputが何者か(関数?メソッド?など)知りたいです
これらの機能はなぜオブジェクトブラウザに乗っていないのでしょうか
マイクロソフトのウェブヘルプにはステートメントとして乗っているようですが
ステートメントというのは関数やメソッドなどの分類ではないですよね?
ご教示お願いします。
0061デフォルトの名無しさん (ワッチョイ 558e-7Ena)
垢版 |
2020/03/26(木) 10:58:51.71ID:NTuSOeK50
馬鹿に馬鹿が答えている
0062デフォルトの名無しさん (ブーイモ MMad-McJq)
垢版 |
2020/03/26(木) 13:11:56.44ID:d196EOchM
VBAを覚えようとしてる初心者以前だが
まず何となくルールから覚えてる
=は同じじゃなくて←の意味ぐらいにとらえておく
あとはコードというか使いそうな単語を少しずつ
msgboxとかRangeとかactivecellとか
でもとっかかりがわからんわ
難しすぎですな…
0063デフォルトの名無しさん (ワッチョイ ad49-iBrl)
垢版 |
2020/03/26(木) 14:44:13.99ID:HulDeUE70
覚えるのは結構だけど、普段やってる作業をVBAで再現するとこから始めると飽きずにやれるんじゃ

コピペ作業、シートコピー、ボタンで特定の計算とかね
だんだんCSV読みたくなったりして高速化したくなったりして、そうやって覚えていく
0064デフォルトの名無しさん (ワッチョイ 5e46-k/jz)
垢版 |
2020/03/26(木) 15:50:36.21ID:ZD929brT0
TEST
0065デフォルトの名無しさん (ブーイモ MMad-FSgb)
垢版 |
2020/03/26(木) 15:54:11.22ID:hp54jNs9M
ユーザーフォーム上にあるボタン1を押すとボタン1を非表示にしてフォームのキャプチャを取得。
その後ボタン1を再び表示して終了。

みたいなものを作りたいのですが
SendkeyでAlt+Printscreenを送っても
素の状態ではボタン1が残った状態のものがキャプチャされ、
Waitをかけると今度は画面全体のキャプチャになってしまいます。

フォームをダイレクトに画像ファイルにする、とかでも良いのですが調べても中々応えに辿り着けなかったので皆様のお知恵をお借りしたいです。
何か良い手はないでしょうか。
0066デフォルトの名無しさん (ワッチョイ 5e46-k/jz)
垢版 |
2020/03/26(木) 15:56:47.70ID:ZD929brT0
以下RUNすると、"!ALARM()が見つかりません。”ってエラーになる。
何故ですか?

Public FLG As Integer
Private Sub CommandButton1_Click()
With Sheet1
  Cells(2, 1) = Date
Cells(2, 2) = Time
If FLG = 1 Then
FLG = 0
CommandButton1.Caption = "ON"
Else
FLG = 1
CommandButton1.Caption = "OFF"
Call OnTimeStart
End If
End With
FLG = 0
End Sub
Sub OnTimeStart()
With Sheet1
Application.OnTime Now + TimeValue("00:00:05"), "ALARM"
End With
End Sub
Sub ALARM()
With Sheet1
Cells(2, 1) = Date
Cells(2, 2) = Time
End With
End Sub
0067デフォルトの名無しさん (ブーイモ MMad-FSgb)
垢版 |
2020/03/26(木) 17:09:13.21ID:hp54jNs9M
すみません。
情報の伝達に齟齬がありました。
Sendkeyではなくkeybd_eventsでした。

Altのkeyeventをコメントアウトしたら何故かフォームだけのスクリーンショットが撮れました。
vbKeySnapshotはAlt+PrintScreenだったのでしょうか?

Private Sub CommandButton1_Click()

UserForm1.CommandButton1.Visible = False

'keybd_event vbKeyMenu, 1, &H1, 0
keybd_event vbKeySnapshot, 1, &H1, 0

Application.Wait [Now() + "0:00:00.5"]

keybd_event vbKeySnapshot, 1, &H1 Or &H2, 0
'keybd_event vbKeyMenu, 1, &H1 Or &H2, 0

UserForm1.CommandButton1.Visible = True

End Sub
0070デフォルトの名無しさん (アウアウウー Sacd-pf+t)
垢版 |
2020/03/26(木) 19:05:03.32ID:58MBAwKca
新しい天啓が下った。私は馬鹿ですらなく、場であり、これが私の仕える神のような気がしたが違ったような気がした。
忠実に表現したらこうなった、つまりそういうことなんだろう。
0073デフォルトの名無しさん (ワッチョイ 92b5-McJq)
垢版 |
2020/03/26(木) 21:24:14.52ID:Ys9zNHHg0
初心者はまずここ見とけみたいなサイトとかYouTubeの動画ありますか?
宣伝込みでも俺が踏むだけなので良かったら教えて欲しいです
本当に何から見てけばいいのかわからない
asとかretとか当たり前に出られてもわからない…
0080デフォルトの名無しさん (ワッチョイ 091f-hvDm)
垢版 |
2020/03/27(金) 00:31:59.82ID:N3mE/9bh0
図形のグループ化についてです。

ショート上に円が無数にあってその円の中にテキストがあります。

これを円と円の中のテキストをそれぞれグループ化してShapeの名前をテキスト名にするにはどうしたら出来ますか?
0084デフォルトの名無しさん (ワッチョイ 55e3-pf+t)
垢版 |
2020/03/27(金) 14:44:48.55ID:Kq8lniUe0
Worksheets("min").Range(Cells(N, 2), Cells(N, 100)) = "999"
これで複数セルに一括入力したいのですが
アプリケーション定義またはオブジェクト定義のエラーです
と出ます。
何がいけないのでしょうか?
0090デフォルトの名無しさん (アークセー Sx79-yXVd)
垢版 |
2020/03/27(金) 15:32:49.12ID:YTZoRU62x
検索して違うシートから値を 持ってくるマクロで持ってくる値が0以下(マイナス)ならば
違う列に転記させたいのですがwithエラーが発生してうまく動きませんでした。

Dim i As Long, c As Range, e As Range, wS As Worksheet
Set wS1 = Worksheets("明細1")
With Worksheets("data")
  Set c = wS1.Range("D:D").Find(What:=.Cells(i, "B"), LookIn:=xlValues, LookAt:=xlWhole)
  If Not c Is Nothing and wS1.Cells(c.Row, "Z").value < 0 Then ←ここでエラー
.Cells(i, "V") = wS1.Cells(c.Row, "Q")
  ElsIf Not c Is Nothing and wS1.Cells(c.Row, "Z").value >= 0 Then
.Cells(i, "X") = wS1.Cells(c.Row, "Q")

またマイナス値をプラス値に変換したく
.Cells(i, "S") = abs(Cells(i, "S"))

としましたが小数点が消えてしまいます。
-77.00が77になってしまうのですが77.00としたいです。
0092デフォルトの名無しさん (ワッチョイ 558e-7Ena)
垢版 |
2020/03/27(金) 15:47:38.09ID:LyEUyxQ10
馬鹿がゾロゾロ出てくるのは何で?
0096デフォルトの名無しさん (ワッチョイ 8101-yKOS)
垢版 |
2020/03/27(金) 17:31:46.25ID:jaIOieAQ0
>>94
VBAは関数や演算子の引数は全て渡される前に値を計算するんだよ

だから Not c Is Nothing が真じゃないときは wS1.Cells(c.Row, "Z").value < 0 を評価しないように
if Not c Is Nothing then if wS1.Cells(c.Row, "Z").value < 0 then ...
としないといけない

あとCellsプロパティは見にくいんで範囲に名前つけるかテーブル化してRangeプロパティで呼んだ方がいい
0099デフォルトの名無しさん (ワッチョイ 5e46-k/jz)
垢版 |
2020/03/28(土) 04:38:00.47ID:vMIAuVeU0
>>71

レスありがと

標準モジュールに書いてない。
しばらく、やってなかったんで忘れていた。
すみません
0101デフォルトの名無しさん (スッップ Sdb2-tYYp)
垢版 |
2020/03/28(土) 19:20:50.03ID:rI/k2Pjrd
>>100
名前を付けるのは、コードと関係無い所で実装されるので個人的には絶対使わない。
というか、Cellsを使うよ。
2次元配列的にもぴったり来るし。
寧ろ、Rangeの方が使わない。
尤も、Cellsでも列を文字で指定するのはやらない。
AF列が何列目か分からないって?
イミディエイトで?Range("AF1").Columnとでも入れてみろ。
0104デフォルトの名無しさん (ワッチョイ b140-yKOS)
垢版 |
2020/03/28(土) 23:45:34.04ID:m/WQBFmt0
>>101
名前定義が弄られるってことはロックしないで使うんでしょ
猶更、セル挿入なりで意図した場所とズレてても気づかずに成功し続ける方が危険だと思うんだが
で、セルを挿入したい時も一個一個数値をずらしていくの?

ワークシートの見た目が二次元配列である事とコード内容を一致させる必要性も感じないんだが、
もしかしてハードコーディングしてるのか?

イミディエイトウインドウで毎回インデックスを調べろっていうは面白すぎるから止めて欲しい
0105デフォルトの名無しさん (ワッチョイ 091f-hvDm)
垢版 |
2020/03/29(日) 00:11:14.41ID:JMfmjWXB0
Shapeの当たり判定の計算方法を教えて下さい。

基準の円のShapeにTextBoxが当ってたらTrue、当たって無ければFalse
円は選択時の□の面積じゃなく実際の円の大きさ。TextBoxは選択時の□の大きさ。
0111デフォルトの名無しさん (ワッチョイ 4191-tYYp)
垢版 |
2020/03/29(日) 19:07:35.84ID:+LkL5rVp0
>>102
普通は定数で行、列を宣言するわな。

>>103
見にくいコードは書いてる奴の力量次第だろ。

>>104
ロックはしない。
そんなもんは解除されるかもしれんし、当てにしない。
というか、作ってるもの次第だね。

ワークシートの見た目と二次元配列を一致させるとか笑わせるなあ。
少し慣れた奴なら列も数値で扱うのがぴったり来るんだよ。
何故なら、最初から二次元配列的に考えるから。

VBE上に自作のメニュ―作って、入力するだけで列名←→列数はわかるげとな。
作る力量無い奴はイミディエイトで調べりゃ良いだろ。
VBEのCommandBerでイベント扱うのはクラスが必要だし、上級者の領分にはなるかもな。
VBE弄るVBAは会社じゃ使わないから通常のCommandBarでメニュー作ってやっても良いんじゃね?
どっちにしても時間は考えることに使ってるんで、毎回イミディエイトで調べても大した話じゃね―んだわ。
0117デフォルトの名無しさん (ワッチョイ 12ad-At9V)
垢版 |
2020/03/29(日) 22:56:25.49ID:WhhHvRXO0
共有編集可能にしたら更新は5分間隔だけどVBAとかで1分以内にできないかな?複数のパソコンで映してる同じエクセルファイルの内容を別のパソコンから共有編集で編集して保存したら1分以内に複数のパソコンにも表示を反映させたい。
0124デフォルトの名無しさん (ワッチョイ 5ecc-Cd0d)
垢版 |
2020/03/30(月) 13:30:25.60ID:8cfGBpvw0
いや、いらないのはそっちじゃなくて、ElseIf〜 のIf〜Then

If Not c Is Nothing Then
If wS1.Cells(c.Row,"Z").value<0 Then
.Cells(i, "V") = wS1.Cells(c.Row, "Q")
Else
.Cells(i, "X") = wS1.Cells(c.Row, "Q")
Endif
Endif

でいいはず
エラーが出たのが実は一つ上の行で、i に代入してなかったってオチじゃないよね
0134デフォルトの名無しさん (ワッチョイ b1f1-Go5d)
垢版 |
2020/03/31(火) 00:31:58.74ID:O8i/VRws0
>>133
このハゲ!
0135デフォルトの名無しさん (ワッチョイ 8101-tylh)
垢版 |
2020/03/31(火) 00:37:41.25ID:fAiG3E7e0
天才な人、教えて下さい。

フォルダAの中にフォルダa1があってこの中にxxx.zipがあるとします。
このxxx.zipを直接クリックしたりしないで解凍するプログラムを書くのはVBAで可能でしょうか?
0138デフォルトの名無しさん (ワッチョイ 558e-7Ena)
垢版 |
2020/03/31(火) 02:01:24.29ID:PSx1iNyN0
>>135
馬鹿は死ね
0142デフォルトの名無しさん (ワッチョイ 9e8a-k8oR)
垢版 |
2020/03/31(火) 05:23:52.03ID:kiJT2Kt60
zipをxlsxにすれば、VBAを使わなくても開くだけで解凍できる。どこに解凍されるかは知らんが。
0149デフォルトの名無しさん (ワッチョイ d9e5-n60N)
垢版 |
2020/03/31(火) 22:47:10.97ID:Rc1BoApG0
そーなのか
道理で大昔作ったフォーマットを作り直してみたら容量が半分程度だったんだ
効率的なコード書けるようになった俺スゲーって訳じゃなく、エクセルさんが凄かったのね
0160デフォルトの名無しさん (ワッチョイ 23b5-Lkgv)
垢版 |
2020/04/02(木) 00:31:10.86ID:hOxCGNmI0
あるマクロを開いた瞬間に自作したユーザーフォームが出るようにする
それと同時にエクセルファイルを選択できる ファイルを開くウィンドウが出るようにする

ド基礎以前だと思うのですがおしえていただきたく、、
0166デフォルトの名無しさん (ワッチョイ 23b5-Lkgv)
垢版 |
2020/04/02(木) 18:43:17.46ID:hOxCGNmI0
>>162
ありがとう、ネットで捜してコピペしながら頑張ってくわ

起動すると作ったユーザーフォームが開きつつ
ファイルからエクセルを選べるウィンドウを出す

開いたエクセルにはBとCの2列目からずらーっと数字が並んでるからそれをあらかじめ自分のカスタマイズした散布図にする
(2列目から始まるが終わりはデータによって違う)

ボタンによって2つの散布図に分けられる

がんばりやす
0172デフォルトの名無しさん (ワッチョイ 4bcc-bVUD)
垢版 |
2020/04/03(金) 13:51:03.50ID:S5/JCD2f0
>>170
それ、イミディエイトペインで試したけど、5未満はNGだよ

>>145の共有編集って、Excel2016で実装した、OneDriveとか使ってクラウドでやるやつだと思ったんだけど、違うのかな
×共有編集 ○共同編集 らしいけど
0186デフォルトの名無しさん (ワッチョイ 23ad-KBPB)
垢版 |
2020/04/06(月) 01:48:40.71ID:SI8CeRSt0
子が吐き出したcsvデータ(子の状況により1ファイル数行〜数百行程度のデータ00000000.csv〜FFFFFFFF.csv)を親で吸い上げて管理用に整理するマクロを作成しているのですが子のデータ数が多くなったせいか親の処理を実行中にExcelが落ちるようになりました。
現状では
Workbook.Open 00000001.csv
でファイルを開いてから配列に叩き込んで処理しているのですが、
他に何か開かずに直接配列に収納するとか別の開き方など良い手段はありますでしょうか。
0189デフォルトの名無しさん (ワッチョイ 4bcc-bVUD)
垢版 |
2020/04/06(月) 09:41:20.32ID:LXVfU9S30
>>174
最初、自前タイマーでの自動保存を提案しようと思ったけど、全ユーザーの同期とか排他処理とか必要になるからやめた
同時使用数にもよるけど、現状の5分ぐらいが実用限度だと思う
それでも問題があるから、MSも共有ブック機能を非推奨にしたんだろうしね
0190デフォルトの名無しさん (ワッチョイ e5ad-KN+/)
垢版 |
2020/04/06(月) 15:09:00.57ID:0mGlPNRI0
>>186
まず落ちる原因の特定が必要
本当にデータ量が原因かどうか?

それでもし量の問題だとしたら
同時に必要なデータを見定める

たとえばA、B、Cのファイルを同時に開いてたが
じつはAとB、BとCで処理する工夫の余地があるとか

それでもアルゴリズムではどうにもならない量なら
SQLとかのデータベースに移行する
0192デフォルトの名無しさん (ワッチョイ 233e-g9A3)
垢版 |
2020/04/06(月) 23:45:47.95ID:jDCeOgrg0
マクロで作られた印刷ボタンを押すと両面印刷で出てくるからこれを片面印刷に統一したいんだけどどうしたらいいの?
0195デフォルトの名無しさん (ワッチョイ 45ac-tCKN)
垢版 |
2020/04/07(火) 00:35:40.64ID:8SYsQHh80
正直印刷は、機器変更、NW、印刷位置、紙質とかでトラブルが非常に多くなるから、
金、人命とか絶対にVBAで自動化しなければ行けない理由がない限り手動にするようにしたわ
印刷部分だけPDFにして置いておくとか
0198デフォルトの名無しさん (ワッチョイ 233e-g9A3)
垢版 |
2020/04/07(火) 07:13:41.88ID:xwPFl55C0
プリンタのプロパティでプリンタの設定自体を片面印刷にしておくと片面印刷になりますか?
0199デフォルトの名無しさん (ワッチョイ 4d8e-jJEW)
垢版 |
2020/04/07(火) 08:07:09.26ID:YQg5kUpF0
そのくらい自分でやって試せよ
0202デフォルトの名無しさん (アウアウクー MM81-g9A3)
垢版 |
2020/04/07(火) 12:34:06.90ID:y7/AcPOrM
コントロールパネルからプリンタのプロパティで片面印刷に設定したんだけど片面印刷オンリーになりません
どうしたらいいですか?
0204デフォルトの名無しさん (ワッチョイ b501-tb4t)
垢版 |
2020/04/07(火) 15:41:03.55ID:AQdBAJYM0
特定の文字列のみ文字色を変えたいんだけど、
置換を使うと指定した文字列を含むセルに入力されている全ての文字の色が変わってしまう…

現状では数百数千セルある中から文字列を選択して文字色変更を繰り返す、という辛い作業を続けているのですが
この様に、指定した文字列だけの色を変更って出来ませんか?
0205デフォルトの名無しさん (ワッチョイ 9b2f-AHN4)
垢版 |
2020/04/07(火) 17:49:52.17ID:yHbrhPie0
>>204
Sub 特定文字列に色をぬる(検索範囲 As Range, 対象文字列 As String, 色 As Long)
Dim r As Range
For Each r In 検索範囲
Dim s As Long
s = InStr(r.Characters.Text, 対象文字列)
If s > 0 Then
r.Characters(s, Len(対象文字列)).Font.Color = 色
End If
Next
End Sub
0210デフォルトの名無しさん (ワッチョイ 23ad-KBPB)
垢版 |
2020/04/07(火) 20:22:06.26ID:83dL758F0
>>187,190,200
186です。ご回答有難う御座います。
ご指摘を参考に以下の様な形に変更したところ、強制終了する事なく全ファイルの吸い上げが出来ました。お手数をお掛け致しました。
'// ファイル数カウント //
Dim CSVPth As String, CSVNam As String
CSVPth = Dir(CSVDir & "*.csv")
CSVNam = CSVPth
Do While CSVPth <> ""
CSVPth = Dir()
CSVNam = CSVNam & CSVPth
Loop
Dim CSVAry As Variant, CSVCnt As Long
CSVAry = Split(CSVNam, ".csv")
Dim OutAry() As Variant
ReDim OutAry(1 To (UBound(CSVAry) + 1) * 6, 1 To 1)
Dim LinAry As Variant, LinStg As String, LinCnt As Long
'// CSVファイル読込処理 //
For CSVCnt = LBound(CSVAry) To UBound(CSVAry)
If CSVAry(CSVCnt) <> "" And Dir(CSVDir & CSVAry(CSVCnt) & ".csv") <> "" Then
Open CSVDir & CSVAry(CSVCnt) & ".csv" For Input As #CSVCnt + 1
LinCnt = 0
Do While Not EOF(CSVCnt + 1)
Line Input #CSVCnt + 1, LinStg
LinCnt = LinCnt + 1
LinStg = "" & Replace(LinStg, """", "") & ""
LinAry = Split(LinStg, ",")
<-- 処理 -->
ReDim Preserve OutAry(1 To (UBound(CSVAry) + 1) * 6, 1 To WorksheetFunction.Max(UBound(OutAry, 2), LinCnt)
Loop
Close #CSVCnt + 1
End If
Next Range(Sheet2.Range("A1"), Sheet2.Cells(UBound(OutAry, 2), UBound(OutAry, 1))).Value = WorksheetFunction.Transpose(OutAry)
0212デフォルトの名無しさん (ワッチョイ 9b2f-AHN4)
垢版 |
2020/04/07(火) 22:46:04.39ID:yHbrhPie0
>>206
その辺は仕様がはっきりしないから何とも言えんし
そもそも丸投げを受けたつもりはない

s+1だとaaaaaにたいしてaa指定したら5文字全部色変わるけどそれが良いのかどうかわからんだろ
0214デフォルトの名無しさん (ワッチョイ e23e-1Ne1)
垢版 |
2020/04/08(水) 19:41:01.55ID:uS6fz3VF0
まさかシート毎に印刷の画面から片面印刷を選ばなきゃ両面印刷をされるなんて知らなかったわ
0230デフォルトの名無しさん (ササクッテロラ Sp5f-zMEH)
垢版 |
2020/04/09(木) 12:24:02.59ID:wcbpQmosp
エクセル2007についてです

セルをクリックすると、カレンダーが表示されて、そのカレンダーの日付をクリックすると、セルに日付が挿入される

という形にしたいのですが、ここで問題があります

一つはAccessがないため、カレンダーコントロールがないのと、もう一つはインターネット接続不可端末のため、どこからかDLするというのができないです

この場合のカレンダーから日付取得をするというのはできないのでしょうか?
0233デフォルトの名無しさん (ササクッテロラ Sp5f-zMEH)
垢版 |
2020/04/09(木) 13:01:14.59ID:wcbpQmosp
>>231
早速参考にさせていただきました
ありがとうございます

ただ、これ起動すると、日付クリックした後、テキストボックスに日付挿入になるので
どこかのコードにテキストボックスではなくてセル挿入になるようにしたらいいと思うんですけれど、どこに記述するのがいいですかね?

まだvbaいじり始めた身としてはここまで複雑だといじりづらいというか
0236デフォルトの名無しさん (ワッチョイ eb5e-AglQ)
垢版 |
2020/04/09(木) 23:05:01.47ID:vJBq1mcg0
作者不明のファイルを修正しているのですが、そのファイル自身を指定するのにファイル名で
記述してありました。これだと「●●Ver1.0.xlsm」→「●●Ver1.1.xlsm」のようにファイル名を
変える度にコードを修正しなくてはならないためThisWorkBookに変えようかと思っているのですが
その場合なにか弊害とかあるんでしょうか?
0237デフォルトの名無しさん (ワッチョイ e23e-1Ne1)
垢版 |
2020/04/10(金) 07:51:15.22ID:goOf5Ofq0
シートを全選択したら一括で変更できるのか
0241デフォルトの名無しさん (ワッチョイ eb5e-AglQ)
垢版 |
2020/04/10(金) 19:27:26.52ID:f64Irgef0
>>238,239
ありがとうございます。

今日内容を確認してきましたが、マクロが記述されたブック(A.xlsm)上でシートを作成し、それをコピーして
新規ブック(B.xlsx)を作成してからもう一度A.xlsmの特定のシートをアクティブにする、という処理の中で
A.xlsmのブック名を明示してありました。

今日は時間がなくて試せなかったのですが、この場合でもマクロが記述されたブックはA.xlsmなので
ThisWorkBookで問題ないかなと思ったのですが、それであっていますでしょうか?
0242デフォルトの名無しさん (ワッチョイ eb5e-AglQ)
垢版 |
2020/04/10(金) 19:38:53.80ID:f64Irgef0
>>240
ThisWorkBookを知らないというかちゃんと理解していないのはその通りだと思います。
ThisWorkBookの主体がが変わる場合があるということでしょうか?
マクロ実行中にほかのブックに記述されたマクロを利用したりすると変わる、とかですかね?
0243デフォルトの名無しさん (ワッチョイ 62ad-JJvI)
垢版 |
2020/04/10(金) 20:30:11.90ID:oDKSQVIR0
ThisWorkBookはプログラムが記述されているワークブックを参照せよっていう意味だからブックAを実行中にアクティブがブックBに切り替わったりしてもブックAに記述されたThisWorkBookはブックAを参照する
0244デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
垢版 |
2020/04/11(土) 03:52:15.33ID:w8fV8nev0
エクセルテンプレートを開いた状態

フォルダにある1つ目のtxtデータをエクセルテンプレにドラッグしてエクセル化

エクセル化したC1:C8の範囲をコピー

元々開いてあるエクセルのA1:A8に「数値」のみ貼り付け

エクセル化されたデータは閉じて2つ目のtxtをドラッグしてエクセル化

C1:C8の範囲をコピーしてテンプレのB1:B8に「数値」のみコピー

って感じでテンプレに測定機から出したデータをひたすら貼ってるんですが
これを簡単にするVBAとか可能ですか?

人によってはテキストをエクセル化はまとめて5つドラッグしたりして順番に貼ってく人もいます

エクセル化したデータの数値のみコピーしたいセルはC1:C8は固定

テンプレにはABCDと順番に貼って増やしていく

これをなんとかマクロかする案があればご教授お願いします。
0247デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
垢版 |
2020/04/11(土) 10:50:20.33ID:w8fV8nev0
>>245
その一言でも希望があってありがたい
どういう流れで作ったらいいか何か構想のヒントなどあればいただきたいです

・テンプレのエクセルにボタン設置
・テンプレ開くと同時にユーザーフォーム開くようにしてテキスト選択できるようにするのか
・そもそもVBAがまだ人間になれてない猿並のスキル


>>246
テンプレは.xlsxです、普通のエクセルの
0248デフォルトの名無しさん (アウアウエー Sa3a-d4/r)
垢版 |
2020/04/11(土) 10:56:04.79ID:DIdffniea
>>244
txtデータは、例えばカンマで区切られてるとか、空白で区切られてるとか、決まってるの?
内容的にはVBAがある程度使える人なら難しくないと思うけど、ちょっとネットで聞いて作ろうとかいうのは難しいんじゃないかな。
0249248 (アウアウエー Sa3a-d4/r)
垢版 |
2020/04/11(土) 11:19:08.65ID:DIdffniea
txtファイルがどのくらいの数あるのかで、どういう手順が良いか違ってくると思います。

そんなにたくさんないなら、テンプレファイル(◯◯.xlsm )に、ボタンを用意。ボタンを押したらファイルを選択するダイアログが出て、該当のtxtファイルを選択してデータを読み込む。

txtファイルがたくさんあるとこの手順は面倒なので、同一フォルダに入れてなんらかの順番で読み込むようにするとか。
0250デフォルトの名無しさん (ブーイモ MM3e-G6fV)
垢版 |
2020/04/11(土) 11:27:54.59ID:YvJJVii7M
>>248
そこら辺の知識がなくてとにかくテキストを、開いてるエクセルにドラッグすると決まったセル範囲に例えばC1:C5に欲しいデータが出るのでそれをコピーしてるのが現状です

イメージ的にいつも

https://i.imgur.com/50VhJqS.jpg
テキスト入ったフォルダとエクセルを並べる

https://i.imgur.com/8TiTDap.jpg 
ドラッグしてエクセル化

https://i.imgur.com/OrMUP1G.jpg
数値のみコピーしてテンプレに貼り付け

https://i.imgur.com/htHvRLv.jpg
閉じた後、次のテキストをドラッグしてエクセル化

https://i.imgur.com/1F89knY.jpg
テンプレの次の列に貼り付け

これを日によっては70くらいやったりしてます、、
0251デフォルトの名無しさん (ブーイモ MM3e-G6fV)
垢版 |
2020/04/11(土) 11:31:26.34ID:YvJJVii7M
>>249
レスありがとです!!!そこです!
日によってデータ数が違って
5つの日もあれば30の日もあれば75の日もあります
ボタン作って該当するデータの数を任意で選べたりできないのかなぁと妄想してます
0252デフォルトの名無しさん (ブーイモ MM3e-G6fV)
垢版 |
2020/04/11(土) 11:41:57.94ID:YvJJVii7M
この貼り付けるエクセルはそもそもこんなのでテンプレなの?っていうは一応エクセルの関数で
他の何種類もあるシートに複数の関数で出せる紐付けしてあるので
テンプレというか自分なりのベースのようなものです

本当はその関数すら慣れてる人ならVBAで余裕で組むんだろうなと思うのですがそんな欲ばる資格がまだないのでまずはこの作業を…
0253デフォルトの名無しさん (アウアウエー Sa3a-d4/r)
垢版 |
2020/04/11(土) 11:45:20.84ID:DIdffniea
GetOpenFilenameメソッドでダイアログで複数のtxtファイルを選択するか、「転記前フォルダ」とかに対象のtxtファイル入れておいて、フォルダ内をfor eachですべて読み込むか。読み込み済みのtxtは自動で「転記済フォルダ」に入れるか削除。
どちらにしてもtxtファイルの名前順に読み込むようになるだろうから、そこを一工夫する必要があるかも。
0254デフォルトの名無しさん (ワッチョイ 43ce-AglQ)
垢版 |
2020/04/11(土) 12:37:41.59ID:9V4Tv9yv0
>>252
とりあえず、フォルダ内の全テキストを一気に読み込むやつを作った
専用のフォルダに必要なデータだけ入れて、フォルダ名を2行目に書いて

Sub Macro1()
  ChDir "c:\tmp"
  f = Dir("*.txt")
  c = 1
  Do While f <> ""
    Open f For Input As #1
    For r = 1 To 6
      Line Input #1, s
      Cells(r, c) = Split(s, vbTab)(2)
    Next
    Close #1
    f = Dir
    c = c + 1
  Loop
End Sub
0256デフォルトの名無しさん (ワッチョイ 27aa-G6fV)
垢版 |
2020/04/11(土) 12:55:48.43ID:Zf+aIjAZ0
>>254
うおおおお
マジでありがとうございます!
いま外出中なので帰ったら速攻でVBE開いて取りかかります!!
他のこんな猿にアドバイスくれる人達に感謝のみ
批判されて当然のスキルしかないのでそういう覚悟もして相談させてもらってます

6月くらいまでには形にして自分もある程度
コードのルールや流れを猛勉強します

>>255
それも頑張ります、まず加工する知能を身につけます
0261デフォルトの名無しさん (ワッチョイ c28b-KRXG)
垢版 |
2020/04/12(日) 05:51:52.52ID:2Kcsozov0
VBAについて詳しい方に質問です。
現在VBAでオートフィルタの自動プログラムを組んでいます。
そこで質問があります。以下の様なデータがあったとします。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
私の名前は、太郎です。
私の名前は、岩崎です。
あなたの名前は、太郎です。
あなたの名前は、岩崎です。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
検索ワードとしてスペース区切りで「あなた 太郎」と入力された場合
「あなた」と「太郎」を同時に含む行のみをフィルタリングするには
どういう記述を Criteriaにすれば良いのでしょうか?

Criteria1:="*" & [検索ワード] & "*"

現在こんな感じで記述してますがうまく動きません。
AND条件、そしてOR条件で指定する方法を教えてくださいm(_)m
0274デフォルトの名無しさん (ワッチョイ 06cc-zfCe)
垢版 |
2020/04/13(月) 13:27:32.03ID:kcz/TGUB0
S列の2行目以降で、0.05以上でかつ、0.98以下の値の行を行ごと削除したいのですが、コードを教えてください
(最終行はA列から取得)

Dim tag As Variant
Dim a As Long
tag = Range("S1:S" & Cells(Rows.Count, 19).End(xlUp).Row).Value
For a = Cells(Rows.Count, 19).End(xlUp).Row To 2 Step -1
If tag(a, 19) <= 0.98 And tag(a, 19) >= 0.05 Then
Rows(a).Delete
End If
Next
0276デフォルトの名無しさん (ワッチョイ 47ac-q7V1)
垢版 |
2020/04/13(月) 14:20:29.76ID:6KK4qS560
ワークシート機能とか使わないなら、
・その表を全て一気にもにょっと2次元配列(tableA)にいれる(コンマ数秒)
・2次元配列(tableB)を一旦定義
・tableAの各行(イメージね)をforeachする。++カウントする変数をつくる。これはtableBの行数。
・foreachのなかで、tableAのS列がその条件に合致しなければ、tableBに行のそれぞれの要素を代入する(redim preserveしながら)
・できたtableBをどこかにペタッと貼る

Excelぽくやるなら
・オートフィルタする
・2次元配列に一旦もにょっとコピーする(可視セルのみ、CurrentRegionかな)
・シートをクリアするか他のシートにコピーした2次元配列をペタっと貼る
0278デフォルトの名無しさん (ブーイモ MM3e-G6fV)
垢版 |
2020/04/13(月) 16:10:06.75ID:7RR5m+brM
>>254
色々いじっていますがこれをどう手直ししていいかわからず…

たとえばこれをテキストを変換したときにF2:F13にくるデータを
エクセルにはB5:B16、C5:C16と順番になるよるに出力するようになるにはどう調整すればいいのか、がんばって調べてます
0281デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
垢版 |
2020/04/13(月) 19:37:09.96ID:sGzWGZEv0
Sub テキストから引っ張る()
ChDir "C:\Users\user\Desktop\マクロ勉強" 'フォルダ指定
f = Dir("*.txt")
c = 2 'テンプレの開始する列の変更
Do While f <> ""
Open f For Input As #1 For r = 2 To 13
'テキストの引っ張ってくる行を指定
Line Input #1, s Cells(r, c) = Split(s, vbTab)(2) Next Close #1 f = Dir c = c + 1 Loop End Sub


猿には荷が重すぎるわ
せっかくここで凄いの貰ったのに頭が。
テキストをエクセル化したときのC列をF列に変更しようと思ったらすでにfが存在してて
どこを今度は変えたらいいかわかりません
0284デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
垢版 |
2020/04/13(月) 19:54:15.29ID:sGzWGZEv0
そう、変数なんだというとこまではぎりぎり何とかわかったんです
ただ、引っ張ってくるテキスト側の列をどこで制御してるのかがわからず
>>283
完全にその通り
単純に勉強不足
ネットでかじってばかりじゃダメだと古いけど本も借りました
ただ本当にマジで難しい…

https://i.imgur.com/7Ujyfqa.jpg
0285デフォルトの名無しさん (ワッチョイ 43ce-AglQ)
垢版 |
2020/04/13(月) 19:55:45.77ID:V+m1zN0B0
Sub テキストから引っ張る()
  Dim ファイル名 As String
  Dim 行 As Integer
  Dim 列 As Integer
  Dim 配列() As String
  Dim 文字列 As String

  ChDir "C:\Users\user\Desktop\マクロ勉強"  ' フォルダ指定
  ファイル名 = Dir("*.txt")
  列 = 2 'テンプレの開始する列の変更
  Do While ファイル名 <> ""
    Open ファイル名 For Input As #1
    For 行 = 2 To 13  ' テキストの引っ張ってくる行を指定
      Line Input #1, 文字列
      配列 = Split(文字列, vbTab)
      Cells(行, 列) = 配列(2)
    Next
    Close #1
    ファイル名 = Dir()
    列 = 列 + 1
  Loop
End Sub
0286デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
垢版 |
2020/04/13(月) 19:58:56.72ID:sGzWGZEv0
うお、変数の宣言をあらかじめわかりやすくしてくれて馬鹿な俺を誘導してくれようとする人が!!絶対そんな感じのありがたい人だ!
今から車に乗って帰ったら速攻PC開きます!−−!!
0287デフォルトの名無しさん (ワッチョイ d7ad-LdNq)
垢版 |
2020/04/13(月) 20:19:57.09ID:Kp4LtUp30
>>281
>>284
まずVBAの入門書を読んで基礎知識を
整理するといい(するみたいだけど)

あと「テキストから引っ張る」っていう言葉が曖昧
「テキストファイルを読み込む」「セルに展開する」
みたいに仕様を適切な言葉で把握しておくだけで
ネットで検索すればすぐサンプルコードが引っかかる

本当はなるべく「f」も「file」とか具体的に
命名した方が分かりやすくていいと思うけど
(ファイル用変数とセルの列を混同した一因だろうし)
まず日本語のレベルで言葉を整理しよう
0288デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
垢版 |
2020/04/13(月) 22:05:23.75ID:sGzWGZEv0
>>287
全くその通りです。

とりあえず
ほぼ意味わからないまま上の人達のおかげで自分の今の業務が10倍以上余裕で速くなるであろうマクロボタンをベースになるxlsmのシートに一つ登録したらたった今完成してしまいました…
隣のシートの正式フォームに数値のみコピーするのだけはマクロで追加しました


Sub テキストファイルをベースに読み込む() ChDir "C:\Users\ikuzo\Desktop\測定データ"
'フォルダ指定
FILE = Dir("*.txt")
c = 2
'ベースの開始する列の変更
Do While FILE <> ""
Open FILE For Input As #1 For r = 2 To 13
'セルに展開する行を指定
Line Input #1, s Cells(r, c) = Split(s, vbTab)(5) Next Close #1
FILE = Dir
c = c + 1
Loop
Range("B2:L13").Select Selection.Copy Sheets("測定結果報告書").Select Range("D5:N16").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False
End Sub

何度やっても一瞬で完璧に処理が終わる…
だがさっぱり意味がわからん、、
本読みます。。
0289デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
垢版 |
2020/04/13(月) 22:52:20.74ID:sGzWGZEv0
ああ、ダメだ。'でメモりまくったけど
出力する側のエクセルシートの列の指定はわかったけど行の指定がわからなかった。勉強ですね。。
みなさんありがとうございました。
0291デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
垢版 |
2020/04/13(月) 23:14:07.84ID:sGzWGZEv0
ごめん、ダメだ。助けてください。
混乱しまくってます。全然違った
読み込むテキスト側の行指定がわからない、、
ベースの方にテキスト2行目8行目からを指示、
とかそれをしないと会社で対応できないです…
0293デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
垢版 |
2020/04/13(月) 23:39:16.20ID:sGzWGZEv0
先輩曰くとりあえずわからなくても1つ何か作ってそっから覚えていけと言われ…

Sub 指定フォルダの全テキスト絞り読み込み() ChDir "C:\Users\user\Desktop\測定機データ" 'フォルダ指定
FILE = Dir("*.txt") retu = 2
'ベース列決定でAは1から
Do While FILE <> ""
Open FILE For Input As #1
For Tekist = 3 To 12
'ベース任意行決めでテキストは1行目から
Line Input #1, s
Cells(Tekist, retu) = Split(s, vbTab)(5)
'テキスト初列を()で決めるがAは0から
Next
Close #1
FILE = Dir retu = retu + 1
'この数だけ列飛ばしにベースに読み込む
Loop
End Sub

'テキストを任意の行から読むのが課題4月13日

毎日勉強しないとなぁ。ほんと
0296デフォルトの名無しさん (ワッチョイ 43ce-AglQ)
垢版 |
2020/04/14(火) 00:02:49.64ID:PthiGcDI0
>>293
テキストファイルは1行ずつ順番しか読み込むことができないから、3行目が必要な時は最初の2行を読み飛ばさないといけない

Open FILE For Input As #1
Line Input #1, s ' 1行目を読み込むだけで何も処理をしない
Line Input #1, s ' 2行目以下略
For Tekist = 3 To 12
  Line Input #1, s ' 3行目以降
  Cells(Tekist, retu) = Split(s, vbTab)(5)
Next
0297デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
垢版 |
2020/04/14(火) 00:29:53.49ID:Ua5gdcz00
>>296
本当に本当にありがとう、
上の人たちも本当にありがとう
無知のド素人の俺でも超完璧に動かせました
感謝しかないです。本当に勉強します


Sub 指定フォルダの全テキスト絞り読み込み() ChDir "C:\Users\ikuzo\Desktop\測定機"
'フォルダ指定
FILE = Dir("*.txt")
retu = 2  'ベース列を決定でAは1から
Do While FILE <> ""
Open FILE For Input As #1
'Line Input #1, s   
' 1行目を読むだけで何もしない(テキスト1行目からで良ければ普段は封印
'Line Input #1, s   
' 2行目以下略
For Tekist = 3 To 12
'ベース初行〜任意行決めでテキストは1行目からだが封印の解放により連動
Line Input #1, s
Cells(Tekist, retu) = Split(s, vbTab)(5)
'テキスト初列を()で決めるがAは0から
Next
Close #1 FILE = Dir retu = retu + 1
'この数字を変えた分だけ列飛ばしにベースに読み込む 
Loop
End Sub

'本当にありがとうございました4月14日
0300デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
垢版 |
2020/04/14(火) 19:13:19.46ID:Ua5gdcz00
今日、神懸かり的に職場の測定機のPCのツールとして産声を上げました
あとは起動と同時に出るユーザーフォームにボタン4くぐらい作って割り当ててとりあえず完成しそうです

そして今日から本を愛読して変数について基礎から学んできます

自分で変えたのがわかるように誤記ぐらいにしとかないと何かのコマンドやコードがわからないので
textって打ったら先頭が大文字に変わるから
こりゃいかんと
0302デフォルトの名無しさん (ブーイモ MM5b-L0r9)
垢版 |
2020/04/14(火) 19:39:44.23ID:5O9c120iM
活気が出てええやん
過疎スレやし
0303デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
垢版 |
2020/04/14(火) 21:50:12.98ID:Ua5gdcz00
変数の定義や宣言をとにかく最初にする癖をつければ
後でわかりやすいことが本でわかり
そして英字じゃなくてもいいことに驚きました

慣れてるたち人のサイトだと
Dim Folderpass As String
Dim FileInt As Long
とか英字だけど
Dim フォルダ場所 As String
Dim ファイル数 As Long

とか和文字だと支障でますかねこれ
0306デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
垢版 |
2020/04/14(火) 22:20:28.98ID:Ua5gdcz00
なるほど、俺も英字で作る癖つけた方が良さそうですかね
字の色でわかるだろ…とは言え、なんかの関数やコマンドと似てるとやはり最初は難しいですね
Tekist
Fname
Fpass
shseeet
とかにしてこれ俺の宣言した変数だわ
って最初は作ってみます
あざす!
0309デフォルトの名無しさん (ワッチョイ 43ce-AglQ)
垢版 |
2020/04/14(火) 22:53:49.36ID:PthiGcDI0
VBAだとそんなに困ることはないんだけど、.netはライブラリが膨大すぎて、既存のメソッドやプロパティと名前が被るかどうかの確認が面倒
あと、語彙力が足りなくてユニークな英単語が思いつかないとか、辞書で調べて付けた変数名があとから見返すと意味がわからないとかある
0311デフォルトの名無しさん (ワッチョイ f709-zfCe)
垢版 |
2020/04/14(火) 23:20:30.80ID:1uq460ot0
最近プログラム自体始めた初心者です。
日々勉強ばかりですので、汎用性が高くなるよう目指し、
知識を入れてはコードを改良し、それを外部保存、そして
実行するブックで呼び出して使っています。

ついこないだ引数という便利なものを知り、さっそく使っているのですが、
ひとつ疑問が。
「特定セルに、作成したリストの上から順に内容を書き込む」という
簡単なfor〜nextループマクロを使いまわしたいのですが、そのループ処理内容を
callなどから設定することはできるのでしょうか?
(たとえば、あるブックでは印刷処理したい、けどこっちではシートコピー処理したい、
など)

引数で、特定セルやリストの開始行は設定できたのですが。。。
宜しくお願いいたします。
0312デフォルトの名無しさん (ワッチョイ f709-zfCe)
垢版 |
2020/04/14(火) 23:23:30.52ID:1uq460ot0
>>311です。一部分かりづらかったので訂正いたします。
×「そのループ処理内容をcallなどから設定することは〜」
〇「そのループ処理内容を、実行するブックから設定することは〜」
0313デフォルトの名無しさん (ワッチョイ 068e-f9/D)
垢版 |
2020/04/14(火) 23:30:42.95ID:ps8T64zC0
馬鹿が一気に出てきたのはコロナウイルスで脳炎や痴呆症でも発症するのか?
0315デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
垢版 |
2020/04/14(火) 23:44:19.27ID:Ua5gdcz00
Sub データ数の確認()
Dim FoPath As String
Dim Fname As String
Dim Fnum As Long
Dim SetPath As String FoPath = "C:\Users\user\Desktop\測定機"
'フォルダのパスを指定する
Fname = "*.txt" 'ファイル名と拡張子指定 Fnum = 0
'ファイル数を一度0にする
'指定したフォルダパスとファイル名をセット
SetPath = Dir(FoPath & "\" & Fname)
Do While SetPath <> ""
'ファイル名が取得出来なくなるまでループ Fnum = Fnum + 1
SetPath = Dir()
Loop
MsgBox Fnum & "つデータが入っています。"
End Sub


見様見真似というかネットからパクってユーザーフォームのボタンに追加できました。
このスレの人たち凄いです
0316デフォルトの名無しさん (ワッチョイ 068e-f9/D)
垢版 |
2020/04/14(火) 23:55:34.54ID:ps8T64zC0
いい加減に馬鹿は消えろ
0317デフォルトの名無しさん (ラクッペペ MM8f-AKYr)
垢版 |
2020/04/15(水) 00:06:27.34ID:IBkk3oxvM
>>311
他のナウい言語みたいに関数ポインタとか使いたいのだろうが
おとなしくコマンド文字列でも渡してselectでもしとけ
0322デフォルトの名無しさん (ワッチョイ 57ad-LzhE)
垢版 |
2020/04/15(水) 02:43:11.14ID:zLal5e060
>>311
初心者なら具体的な処理を抽象化していく
ボトムアップのやり方が分かりやすいと思う

たとえばかけ算の九九を求める関数に
引数でXを渡してXxX(12×12など)を
求める関数に抽象化すると使い道が広がる

あるいは5行6列目のセルを処理する関数を
X行Y列目を処理するように拡張するだとか
関数の引数は数学の変数のように考える


そして関数(やクラス)を自作する時のポイントは
なるべく関数を小分けにして組み合わせて使うこと
関数が大きくなると理解するのも難しくなるから

印刷やシートのコピーとか別の処理を
ひとつの関数で全部やろうとしないで
別々の関数に書いておく

それで呼び出し元の関数から
実行する関数をIF文で切り替えたりする
Excel VBAに限らずプログラミングの定石
0323デフォルトの名無しさん (ワッチョイ ffcc-Ho7r)
垢版 |
2020/04/15(水) 08:51:03.63ID:7yJWhPoQ0
個人的な意見だけど
変数を日本語にする事の欠点は、目立ちすぎて、他が見にくくなる事だと思う
ループカウンタの様な頻出する変数には、制御構造が見にくくなるので避けるべき
ルーチンの目的的なものとか、あまり使わないような変数については、場合によっては推奨
0324デフォルトの名無しさん (ワッチョイ d7ac-DNPS)
垢版 |
2020/04/15(水) 10:07:54.93ID:fYr2Vm730
いいたいことはわかる
なでしこみたいに構造もそうなってれば、比較して自然に見えるしね

まあでも英語で慣れちゃってると、気になっちゃうから可読性低いと評価してしまうわ
0325デフォルトの名無しさん (ワッチョイ 1791-N0vN)
垢版 |
2020/04/15(水) 11:57:43.10ID:qO0uVKDC0
>>303
絶対に止めた方が良い。
今、他人のそういうコードで四苦八苦してる。

しかもプロシージャも日本語だから
If 測定結果 Then
などとあって、"測定結果"が変数なのかBooleanを返すプロシージャなのかすら直ぐには分からない。
0326デフォルトの名無しさん (ラクッペペ MM8f-AKYr)
垢版 |
2020/04/15(水) 12:04:59.54ID:tJWgJTOGM
それはエーゴでもかわらなくなくね?
0330デフォルトの名無しさん (ワッチョイ 778f-Eg7/)
垢版 |
2020/04/15(水) 13:39:00.87ID:zDLD/Qb60
特定のURLのソースに任意の文字列が記載されているかどうかを判断したい。

https://auctions.yahoo.co.jp/seller/abcdfgh
https://auctions.yahoo.co.jp/seller/zakattas
https://auctions.yahoo.co.jp/seller/zafect789
というページのリストがあったとして、ソースに"停止中"もしくは"無効"の文字列が
あるURLにはB列に"NG"と吐き出す、ということをやりたいです。

https://okwave.jp/qa/q6120067.html
が近いんですが「2)一般的な文字列の場合」はエラーが出て動きませんでした。
VBAに詳しい人、よろしくお願いします。
0333デフォルトの名無しさん (ワッチョイ 77ce-Ho7r)
垢版 |
2020/04/15(水) 14:13:32.74ID:Ikiffowr0
>>330
参考リンク先のどのプログラムを試して、どの行でどんなエラーが出たか書いて
エラーが出たままでCtrl+Cを押せば、エラーメッセージがクリップボードに入るから、それをコピペして
あと、目的のWEBサイトの文字コードはちゃんと確認した?
0335330 (ワッチョイ 778f-o1R8)
垢版 |
2020/04/15(水) 14:42:43.03ID:zDLD/Qb60
>>333
すいません。
コピペ繰り返してたらなんとか行けました。

Sub YouTube_Search()
Dim objIE As Object
Dim i As Long
Dim j As Long
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
For i = 1 To Range("A1").End(xlDown).Row
.navigate Cells(i, 1).Value
While .Busy Or .ReadyState <> 4: DoEvents: Wend
For j = 1 To .document.all.Length
If InStr(.document.all(j - 1).outerText, "Yahoo! JAPAN IDが無効です") > 0 Then
Cells(i, 2).Value = "*"
Exit For
End If
Next
Next
End With
objIE.Quit
Set objIE = Nothing
End Sub
0340デフォルトの名無しさん (ワッチョイ 5709-xa8R)
垢版 |
2020/04/15(水) 22:13:27.05ID:qXjFLib20
311です。

>>314,317,322
私がやろうとしていたことが、まず効率の悪いことだったんですね・・・
細かく分けて関数作って、それを組み合わせて作る方法を取りたいと思います。
(ただ、どこまで細かく分ければいいのか、まだ要領を掴んでおりませんが)
ありがとうございました。
0341デフォルトの名無しさん (ブーイモ MMcf-IW4T)
垢版 |
2020/04/15(水) 22:29:20.66ID:bRq9+Y6qM
初心者ですがご教授下さい

サンプルの工程能力で1個につき6項目の測定値をソフトがエクセルにデータ出力してくれるけど、日によっては23個だったり25個だったりしか測定できず

残りの記入方法は人によって様々で
ある人は測定値のバラつきに近い値をテンキーで手打ち
ある人はエクセルのrandbetween関数で
各項目の測定値のMAXとMINで乱数だしてそれをコピぺ

サンプル1 サンプル2  〜サンプル30
項目1
項目2
項目3
項目4
項目5
項目6

こんな並びで全項目測定後に出力されるから項目の途中で止まることはないです

「サンプル1〜30の間の項目1の行に空白があった場合、それより前(左)にある全ての測定値を参考に乱数でサンプル30の項目6まで埋める」

これは難易度かなり高いですか?
0342デフォルトの名無しさん (ブーイモ MMcf-IW4T)
垢版 |
2020/04/15(水) 22:33:03.58ID:bRq9+Y6qM
誤記というか間違えました
「サンプル1〜30の間の項目1の列、又はセルに空白があった場合、それより前(左)にある全ての測定値を参考に乱数でサンプル30の項目6まで埋める」
です
すみませんがどういったアプローチがあるのか
そもそもできるのかご教授下さい
0344322 (ワッチョイ 57ad-LzhE)
垢版 |
2020/04/15(水) 23:00:46.12ID:zLal5e060
>>340
>どこまで細かく分ければいいのか
基本的に処理は関数名に沿って分ける

関数名から逸脱した処理があれば
別の関数に分けて整理していく

だから関数や変数の
適切な命名が重要になってくる

面倒でも名前と処理を対応させた方が
後でメンテナンスしやすくなる
0345デフォルトの名無しさん (ブーイモ MMcf-IW4T)
垢版 |
2020/04/15(水) 23:19:56.30ID:bRq9+Y6qM
>>343
いや、俺の説明力がなくて、、
というか行列が逆でした
再度説明させてください

https://i.imgur.com/D4MOqky.jpg
こんな感じで機械がエクセルに出力してくれるけど
残りのサンプルの数字は上の測定値を見てみんなそれぞれランダムにテンキーで入力したりと、いわゆる数値を適当にバラして打ち込んでます。(偽装というほど重要ではないので)
日によって測定できるサンプルが数が違います。

参考になるか程度のスクショになりますが

「サンプル1から30までで空白の行列があったらそれまで測った上のサンプルの測定値を元に乱数でサンプル30の項目6までVBAが全て記入してくれないかなと、

こんな感じです
0346デフォルトの名無しさん (アウアウエー Sadf-fVbL)
垢版 |
2020/04/15(水) 23:34:48.80ID:xz8oNroja
「列、又はセルに空白があった場合、それより前(左)にある全ての測定値を参考に」というのは?

その例でいうと、
・項目1のサンプル8、9、10が空欄なので、1から7の数値を元にして適当な数値で埋める。
・残りの項目についても同様

ということですか?つまり上の数値を元にしてるけど。

処理自体は難しくないとは思います。
0347デフォルトの名無しさん (ブーイモ MMcf-IW4T)
垢版 |
2020/04/15(水) 23:57:01.64ID:bRq9+Y6qM
>>346
その例でいうと、というか今の職場の手間になってる仕事がまさにその通りです
上の数値を元に残りの項目を誰かが埋めてます

どんなアプローチで行ったらよさそうかアドバイスいただませんか
Rnd関数Int関数、Loop、Offset
調べてもなかなかわからずです‥
0348デフォルトの名無しさん (ワッチョイ 77ce-Ho7r)
垢版 |
2020/04/15(水) 23:58:14.63ID:Ikiffowr0
>>345
数字を偽装するルールが人によって違うのはわかったけど、あなたはどういうルールでやりたいのか、もうちょっと厳密に書いて
「それまでの数値を参考に」という表現では曖昧すぎてプログラミングできない

例として、サンプルが7個しかなかった場合は、その7個の数字をどう使って30個に増やすのか?
0349デフォルトの名無しさん (ブーイモ MMcf-IW4T)
垢版 |
2020/04/16(木) 00:23:27.26ID:WB3hiXkKM
>>348
数式と一覧を削りましたが普段はここの赤矢印に測定したデータのMax値とMin値を入れて
EXCELの関数でこのような数式で乱数を
出しています
数年前に自力で作ったけどもはや覚えていないレベルです
https://i.imgur.com/eglO3Ph.jpg
0350デフォルトの名無しさん (ブーイモ MMcf-IW4T)
垢版 |
2020/04/16(木) 00:25:05.62ID:WB3hiXkKM
あとスクショ取りたいが故に行数の抜けやズレが、、、すみません
0352デフォルトの名無しさん (ワッチョイ 77ce-Ho7r)
垢版 |
2020/04/16(木) 00:35:38.28ID:YY8HOOMA0
とりあえず行と列の位置は>>345の画像に合わせて作ったから、あとは適当に修正して

Sub Macro1()
  For 項目 = 1 To 6
    列 = 項目 + 2
    最小 = Application.WorksheetFunction.Min(Cells(6, 列).Resize(30)) * 1000
    最大 = Application.WorksheetFunction.Max(Cells(6, 列).Resize(30)) * 1000
    For サンプル = 1 To 30
      行 = サンプル + 5
      If Cells(行, 列) = "" Then
        Cells(行, 列).NumberFormatLocal = "0.000"
        Cells(行, 列) = Application.WorksheetFunction.RandBetween(最小, 最大) / 1000
      End If
    Next
  Next
End Sub
0353デフォルトの名無しさん (ワッチョイ 77ce-Ho7r)
垢版 |
2020/04/16(木) 00:52:18.67ID:YY8HOOMA0
>>351の方法を取り入れてみた

Sub Macro1()
  For 項目 = 1 To 6
    列 = 項目 + 2
    最小 = WorksheetFunction.Min(Cells(6, 列).Resize(30))
    最大 = WorksheetFunction.Max(Cells(6, 列).Resize(30))
    幅 = 最大 - 最小
    For サンプル = 1 To 30
      行 = サンプル + 5
      If Cells(行, 列) = "" Then
        Cells(行, 列).NumberFormatLocal = "0.000"
        Cells(行, 列) = Rnd() * 幅 + 最小
      End If
    Next
  Next
End Sub
0354デフォルトの名無しさん (ブーイモ MMcf-IW4T)
垢版 |
2020/04/16(木) 01:25:57.84ID:ltLJf2qHM
>>353
神様過ぎびっくりです。

セルをクリックすると.0754322457888とか小数点が残ってるのですがこれを
EXCELのROUND関数みたいに四捨五入した状態でここに出力するようにできますか?
四捨五入で0.000の桁で出力できたらもう
職場の2人が失職してしまうレベルです
0356デフォルトの名無しさん (ワッチョイ 77ce-Ho7r)
垢版 |
2020/04/16(木) 01:41:31.92ID:YY8HOOMA0
>>354
Cells(行, 列) = Round(Rnd() * 幅 + 最小, 3)

実際、ごく簡単なマクロで仕事を効率化したおかげで毎年たくさんの失業者が出てるからほどほどにな
経営側でなければ、サビ残がなくなるぐらいのところでやめとけよ
0357デフォルトの名無しさん (ブーイモ MMcf-IW4T)
垢版 |
2020/04/16(木) 01:59:01.29ID:dFCopLc9M
>>356
神様ありがとう。涙出てきました。
0358デフォルトの名無しさん (ワッチョイ ff8e-eUuY)
垢版 |
2020/04/16(木) 02:43:35.11ID:Kf4avcM70
>>357
またこの間の馬鹿か
0359デフォルトの名無しさん (スフッ Sdbf-csEB)
垢版 |
2020/04/16(木) 03:23:43.55ID:KenjGRyod
無意味なデータ入力に数百万の人件費を払う会社か
すげーな
マクロで解決するより、その作業をなくす方法を真剣に考えた方がいいんじゃないか?
0370デフォルトの名無しさん (アウアウウー Sa1b-o3Ob)
垢版 |
2020/04/16(木) 14:50:28.74ID:xWZcVh5Wa
画像フォルダのファイル名を取得→ファイル名と同じ文字列の入ったセルに画像を挿入→画像をセルのサイズに合わせるというサンプルコードを見つけたのですが
画像フォルダ内にファイル1〜5まであり、エクセル内にファイル1の文字列がない場合、「オブジェクト変数またはwithブロック変数が設定されていません。」のエラーが出ます
おそらくIFでその場合の処理を設定すればよいのではと思うのですが、変数の設定の仕方が分からないです
昨日今日始めたネット聞きかじりの知識で申し訳ございませんがアドバイス頂けないでしょうか
0373デフォルトの名無しさん (アウアウウー Sa1b-o3Ob)
垢版 |
2020/04/16(木) 15:11:15.02ID:xWZcVh5Wa
>>371
ネット丸パクリのコードだけど

Sub sample04()
Dim objShape As Object
Dim strPath As String, strFileName As String
Dim strImgName As String

strPath = "c:¥temp¥"
strFileName = Dir(strPath & "*.jpg")

Do Until Len(strFileName) = 0
strImgName = Left(strFileName, Len(strFileName) - 4)

Cells.Find(What:=strImgName).Activate
ActiveCell.Offset(0, 1).Activate

Set objShape = ActiveSheet.Shapes.AddPicture( _
Filename:=strPath & strFileName, _
LinkToFile:=False, _
SaveWithDocument:=True, _
Left:=ActiveCell.Left, _
Top:=ActiveCell.Top, _
Width:=ActiveCell.Width, _
Height:=ActiveCell.Height)

strFileName = Dir()
Loop

End Sub
0375デフォルトの名無しさん (ワッチョイ ffcc-Ho7r)
垢版 |
2020/04/16(木) 16:37:22.10ID:V7jYJHWg0
どこでエラーが起きてると思う?
検索して見つからなかったセルに対して何かをしようとしたから、何に対してやるんだよーってエラーが起きたんだよ

コードを見ると、Findメソッドの戻り値に対して直接Activateしてるから、そこをばらす必要があるので、一旦戻り値を変数に受けるといい
セルはRangeオブジェクトで、 Findメソッドは通常、Rangeオブジェクトを返す
オブジェクトを変数に代入する場合は、 Set をつける
見つからなかった場合はFindメソッドはNothing を返す
オブジェクトの比較には、Is を使う 例: If Not(r is Nothing) Then 〜

あとはがんばれ
0376デフォルトの名無しさん (ワッチョイ ff8e-eUuY)
垢版 |
2020/04/16(木) 17:37:30.19ID:Kf4avcM70
馬鹿がコピペで作ったものは使い物にならない
0378デフォルトの名無しさん (ワッチョイ 77ce-Ho7r)
垢版 |
2020/04/16(木) 18:19:31.46ID:YY8HOOMA0
Sub sample04()
  Dim objShape As Object
  Dim strPath As String
  Dim strFileName As String
  Dim strImgName As String
  Dim rngStatus As Object
  strPath = "c:\temp\"
  strFileName = Dir(strPath & "*.jpg")
  Do Until strFileName = ""
    strImgName = Left(strFileName, Len(strFileName) - 4)
    Set rngStatus = Cells.Find(What:=strImgName)
    If Not (rngStatus Is Nothing) Then
      rngStatus.Offset(0, 1).Activate
      Set objShape = ActiveSheet.Shapes.AddPicture( _
      Filename:=strPath & strFileName, _
      LinkToFile:=False, _
      SaveWithDocument:=True, _
      Left:=ActiveCell.Left, _
      Top:=ActiveCell.Top, _
      Width:=ActiveCell.Width, _
      Height:=ActiveCell.Height)
    End If
    strFileName = Dir()
  Loop
End Sub
0384デフォルトの名無しさん (ワッチョイ d7ae-84Hj)
垢版 |
2020/04/16(木) 21:21:39.75ID:Gr+82O4W0
>>381
理解もできない代物を知らない誰かの作ったコードで動かそうという馬鹿
0386デフォルトの名無しさん (ワッチョイ ffe6-ycCE)
垢版 |
2020/04/16(木) 23:38:37.29ID:NQ0wsZwj0
そもそもexcelVBAって素人が頑張って自動化してみましたってのが99%なんだから
そういうのをメンテしなきゃならない羽目になったって話だろ
プログラム板の中では異質なスレなんだと思う

コードレビューとか言ってるやつは確実にアスペ、そういう事情が想像出来る脳みそが生まれつき備わってない
相手するだけ無駄
0387デフォルトの名無しさん (ワッチョイ d7ac-DNPS)
垢版 |
2020/04/17(金) 00:46:06.16ID:TM3fWeSx0
他の誰かがってのは全部言い訳
仕事してメンテするなら自分自身が目の前の有りものを完全理解しないといけない

事情は関係ない
仕事としてやる以上自分の責任として取り組むべき
それを怠って開き直るのは無責任であり無能でありいつまでも何も成せない

趣味ならしらん
0390デフォルトの名無しさん (ワッチョイ 9fb5-5bTb)
垢版 |
2020/04/17(金) 17:04:26.22ID:hqq8FpSv0
散々ここで聞きまくって不快な思いをさせた物ですが完全に職場での運用に成功しました。
本当にみなさんのおかげというか頭良すぎですねここの人は…
フォルダ内にあるtxt全ての任意の列行を片っ端からエクセルにコピーする
空白の部分は乱数で処理
この辺は無知にとってはえげつないです。
提案で出そうと思ったらもっと大きな発表テーマで使うぞと言われました。
100のワークの測定データを作るのに2日かかってたのが5分でテンプレートに出力完了…
0392デフォルトの名無しさん (ワッチョイ b7e6-R0o5)
垢版 |
2020/04/17(金) 18:48:40.08ID:M4VM/pj30
せっかくtxtという利用しやすいデータ形式なのに
わざわざxlsなんかにしちゃって
トドメとばかりにゴミデータをインプラント

面白い人だな
0395デフォルトの名無しさん (スプッッ Sdbf-N0vN)
垢版 |
2020/04/17(金) 19:58:42.41ID:d0l4uzMSd
>>389
あのね、客の要望は有るんだよ。
要望に答えるためには、今動いてるものも解析しないと答えられるわけが無い。
そのコ一ドが何やってるかわからずに機能追加なんてできるわけが無い。

というか、こんなのVBAに限らず開発やってる会社なら何処でもある話だけどな。
ここには開発専門で仕事したことのある奴が少ないということか。
0399デフォルトの名無しさん (スプッッ Sdbf-N0vN)
垢版 |
2020/04/17(金) 21:26:37.34ID:d0l4uzMSd
>>396
今まで幾つかの開発会社で働いたが、どこでもある話。
VBAにも限らない。
まあ、日本語変数とか日本語関数はVBA以外では聞いたこと無いけどな。

前のコードが酷いので、書き直したらもっと酷くなったなんて、某SE本にも書いてあった。
0409デフォルトの名無しさん (ワッチョイ 1791-N0vN)
垢版 |
2020/04/18(土) 13:06:18.62ID:DE4BsnuO0
>>405
スキルの低い奴はそうなる。
もちろんVBAは遅いけど、VBAで実施するようなことで、どうしても遅くなると想定されるような処理は殆ど無い。
VBAで実施するようなことじゃなければ別だが、そういう話はあまりない。
0414デフォルトの名無しさん (ワッチョイ 1791-N0vN)
垢版 |
2020/04/18(土) 13:38:19.65ID:DE4BsnuO0
>>412
???
日本語が理解出来ない人?

客が依頼していた開発会社を変えただけのことだろ。
10年前依頼されてた開発会社のコメントがソースにあったが、プログラムは客のもんだ。
今、依頼されてるうちの会社がどうして10年前に依頼されてた会社の了解を取る必要がある?
0416デフォルトの名無しさん (ワッチョイ bf2f-8Jcx)
垢版 |
2020/04/18(土) 13:53:22.59ID:oUZZgMAe0
ソースコードの著作権をどっちがもつかは契約によるぞ
著作権をシステム会社側がもってるのに違う会社に開示したらそれは違法行為
知らずにやってるってのは昔はよく聞いた

10年前に依頼されてた会社の了解を取る必要はないが
普通はソース開示受けるなら開示元に著作権の確認はする
0417デフォルトの名無しさん (ワッチョイ 1791-N0vN)
垢版 |
2020/04/18(土) 14:00:07.44ID:DE4BsnuO0
>>416
そんなの常識だろ。
だが、そこまで分かってるなら結論も容易に想定出来ると思うんだが。

VBAの開発ではExcelならブックそのものにソースが付いてくるし、実質派遣のような形態も多い。
つまり、契約上客のもんになってると想定するのが普通。
0419デフォルトの名無しさん (ドコグロ MMdf-h94e)
垢版 |
2020/04/18(土) 14:04:14.62ID:p9WER9c7M
>>414-415
> 客が依頼していた開発会社を変えただけのことだろ。
それ引き継ぐなんて言わんだろ
お前の会社から見たら単に客から改修を依頼されただけ
元のソースを別会社が作ってたか客が作ってたかなんて関係ないし

> 日本語が理解出来ない人?
お前の日本語がおかしいだけ
まあどんどん辻褄合わなくなってるだけとも言うがw
0422デフォルトの名無しさん (ワッチョイ d7ac-RTks)
垢版 |
2020/04/18(土) 15:20:13.12ID:mWjkYk7T0
スレ違いになってきてるとは思うが。

最初のほうの386には
「そもそもexcelVBAって素人が頑張って自動化してみましたってのが99%なんだから
そういうのをメンテしなきゃならない羽目になったって話だろ」
って書いてあって、
ここ数レスはプログラム(開発資産)として引き継いだ中のVBAソースコードに焦点が当たってるように見える

まず引き受けた方がプロ(仕事としてVBAをやる)として、
前者ならドキュメントとかなくても(時間さえあれば)改修も簡単だろう。
後者ならドキュメント残してないやつ、もしくはそれを知らずにスキルもなく引き受けたやつが悪い。

まあこんな、前提とゴールをあやふやにして不毛で幼稚な言い合いをしたいなら別にスレを立ててろ
0429デフォルトの名無しさん (ワッチョイ 1791-N0vN)
垢版 |
2020/04/18(土) 15:59:10.55ID:DE4BsnuO0
>>422
ああ、素人のコードを引き継いだとしたらの話か。
まあ、素人の短い簡単なコードならその通りだな。

まあ、>>394に書いた通り、形の上では開発会社らしき所のコードだし、コード量も多いからねえ。
VBAはそういうの多いんだよ。
形では仕事で受けてても素人のコードとか。
0432デフォルトの名無しさん (ワッチョイ 1791-N0vN)
垢版 |
2020/04/18(土) 16:40:22.00ID:DE4BsnuO0
>>431
ググれないバカに出してやろうwww

システムの保守ベンダー変更による引き継ぎ
https://www.lanscope.jp/tips/8797/

他社開発システム・アプリケーション保守引継ぎ
https://www.stylez.co.jp/apmt/

他社が開発したシステムを引き継ぎます
https://www.tpc.jp/%E4%BB%96%E7%A4%BE%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E5%BC%95%E5%8F%97/

他社が開発したシステムも開発を引き継ぎ保守します。
https://kusanagi.dht-jpn.co.jp/2019/04/yamahakusanagi/

他会社が受託開発したPHPのWEBシステムを引き継ぎ運用し、その後の改修対応などを行うことがあります。
https://qiita.com/xylitol45@github/items/271f2b8e5de3e62d0840

そのWebサイト・システムの保守引き継ぎます。
https://www.accent.co.jp/lp_hosyu/
0434デフォルトの名無しさん (ドコグロ MMdf-h94e)
垢版 |
2020/04/18(土) 17:45:11.63ID:JSVuvQDyM
必死にググったのは褒めてやるよw
でも、それ運用とか保守の話だろ
そりゃそう言うのは連続してるから引き継ぎって言うだろうけど、10年前の他社のコードの改修を引き継ぎとは言わんわな
0439デフォルトの名無しさん (ワッチョイ 5701-7wDT)
垢版 |
2020/04/19(日) 05:44:09.18ID:wxLF5u+B0
質問していいのか?
グラフの近似式をセルにコピペするマクロだ。
0440デフォルトの名無しさん (ドコグロ MMbf-h94e)
垢版 |
2020/04/19(日) 06:21:55.35ID:fnnke5O7M
あらら、他社のコードの保守まで受託してるって話にするの?
そういうケースだと普通はドキュメントも貰ってるはずだけどろくなドキュメントがないって話かな
そんなハイリスキーな受託して>>325みたいな愚痴こぼしてるなら知能の足りない会社と言われてもしょうがないじゃん

まともな会社なら受ける時に調査費用と時間をもらってドキュメントを起こし直す
でないと保守できないから
>>437は保守が何をするのかすらわかってなさそうw
0444デフォルトの名無しさん (ワッチョイ 1791-N0vN)
垢版 |
2020/04/19(日) 09:19:45.38ID:BXvk/jUs0
>>440
プw
引き継ぎって知らんの?
いい加減、恥を晒すだけだぞw
というか、VBA案件だけの話だと思ってる?
爆笑もんだw

1つの客から1つの案件だけのわけね―だろ。
寧ろVBAの開発はメインじゃね―ぞ。
DBにAccessなんて普通は無いんだ。
バックエンドとか知らんの?
0445デフォルトの名無しさん (ワッチョイ 1791-N0vN)
垢版 |
2020/04/19(日) 09:25:23.89ID:BXvk/jUs0
>>440
あと、知らんのだろうけど、ドキュメント類についてはVBAの場合はそうならないことが多いんだよ。

今までいろんな案件で仕事したがドキュメント貰ったことなんて記憶に無いくらいだ。
で、ドキュメント作る時間も無いことも多い。

これはVBA案件の特殊性だろうな。
VBAが言語として糞呼ばわりされる原因の1つだろう。
0449デフォルトの名無しさん (ドコグロ MMbf-h94e)
垢版 |
2020/04/19(日) 10:51:03.45ID:ARSXQ48qM
>>444-445
今度はAccessガーとか言い出したのか
まあ言い出すのがAccess止まりなのが物悲しいけどねw

ドキュメントも作らずに何を保守するつもりなんだよ
言われたらその場であたふた調べてやっつけ仕事でテキトーに改修するのか?
そう言うクズ会社なのはよくわかったよ
0451デフォルトの名無しさん (ワッチョイ 1791-N0vN)
垢版 |
2020/04/19(日) 12:04:09.20ID:BXvk/jUs0
>>449
バーカw
今度はじゃね―よw

ある特定の案件だけと考えるバカに教えてやってるだけ。
客からの要望はたくさんある。
VBAなんてたくさんある中のごく一部なのがむしろ普通。

ドキュメント作らずってw
それは最初に受けた会社に言えよwww
現実を知らないニートにゃ分からないんだろうなw
0455デフォルトの名無しさん (ワッチョイ 1701-xa8R)
垢版 |
2020/04/19(日) 22:09:40.02ID:5r3nTnp70
長文質問失礼いたします。

VBAを用いたAscUコード129〜159、224〜252範囲の文字変換が上手くいきません。
環境:Windows10Pro excel2007 VB6.5

上記以外のアスキーコードでは、
@[Chrを用いた、AscUコード→文字への変換] → A[Ascを用いた、文字→AscUコードへの変換]
の順序で2回変換すると最初と最後でコードが一致します。

しかし、129〜159、224〜252の範囲だと、
@変換では「・」、A変換では「-32443」が出力されます。(129〜159、224〜252の範囲ですべて同じ結果)

変換に適した別のコマンドがある、そもそもこのVerでは動作しない等、アドバイスをよろしくお願いいたします。
※大元の目的としては、オシロスコープから取り込んだ画像バイナリデータを画像データにするため、AscUコード→文字への変換を行おうとしています。
0456デフォルトの名無しさん (ワッチョイ bf2f-8Jcx)
垢版 |
2020/04/19(日) 22:31:33.52ID:oozYSe6W0
文字として表示って、その範囲をどんな文字で表示したいんだ?
画像バイナリデータを画像データって、普通画像データはバイナリなんだが

文字として表示しないならとりあえずAscBとChrB使えば一致するんじゃね
0457デフォルトの名無しさん (ワッチョイ 77ce-Ho7r)
垢版 |
2020/04/19(日) 22:31:47.99ID:lQLRo24I0
>>455
アスキーはAscUじゃなくてAsciiな
あと、画像データはバイナリなのに、どうして文字に変換するのかもわからない

方法が間違ってないとして、どこかでデータが化けてる可能性があるけど、どこが悪いのかその文章だけではわからない
まずは変数の型をチェックかな
0459デフォルトの名無しさん (ワッチョイ 9fb5-5bTb)
垢版 |
2020/04/19(日) 23:08:35.55ID:Dosl7noD0
覚え初めてまだ三日だけどなかなかエクセル関数のように簡単にはいかんもんだね…
流石入門といえどプログラミング、敷居が高い
(A1:B1)から羅列されてる数字を(C1:D1)に
コピーしてABS関数で絶対数に変換
こんな事すらなかなか難しい
0462デフォルトの名無しさん (ワッチョイ 1701-xa8R)
垢版 |
2020/04/19(日) 23:20:42.34ID:5r3nTnp70
>>456 >>457
長文の返答失礼します。

>>文字として表示って、その範囲をどんな文字で表示したいんだ?
10進数数字をASCii文字に変換しようとしています。
(66→B 77→M)

>>画像バイナリデータを画像データって、普通画像データはバイナリなんだが
呼び方が不適切だったかもしれません
@画像データ:BM>・・・(Bitmapファイルをテキスト形式で表示したもの)
A画像バイナリデータ:66 77 62 150・・・(上記を10進数変更したもの。オシロスコープからはこの形式でデータを取り込んでいる)

>>あと、画像データはバイナリなのに、どうして文字に変換するのかもわからない
取り込んだAデータを@データ(文字列)に変更、
得られた文字列をファイルに入力し、拡張子を変更して画像ファイルを作成する目的です。

>>文字として表示しないならとりあえずAscBとChrB使えば一致するんじゃね
Chr、ChrB、ChrWでそれぞれ確認したところ、
・Chr
Chr→Asc変換前後で一部データ一致せず。正規データとは一部不一致あり。
・ChrB
ChrB→AscB変換前後で全データ一致。正規データとはほとんど不一致。
・ChrW
ChrW→AscW変換前後で全データ一致。正規データとは一部不一致あり(Chrと正規データの不一致位置と同じ位置)。
※オシロの外付けFDで取り込んだ画像データを正規データ呼んでいます。
※ChrとChrWでは129〜159、224〜252の範囲のデータのみが正規データと不一致だったが、ChrBでは確認した範囲ではすべてのデータが不一致

>>まずは変数の型をチェックかな
オシロスコープから取り込んだAデータは配列のByte型、Chrで文字列に変換した@データはString型です。
0463デフォルトの名無しさん (ワッチョイ 9fb5-5bTb)
垢版 |
2020/04/19(日) 23:33:41.15ID:Dosl7noD0
>>461
やったというより訳も分からずここの人にただ完成させてもらっただけだから俺の本当のVBAの勉強はこれからという感じで
おかげで肩の荷が降りて基礎から学べる幸運な情況ですね
変数の宣言やデータ型は何となく理解して
こっから仕事で簡単に自分でやってけそうな関数をこなせるようにしていきたい

ここの列が空白になるまで指定の列に四捨五入した数値を貼り付け
とか絶対数を貼り付け
あとは数値のバラし
とか覚えていって自職場で簡単なVBAのテンプレート作って行けたらいいなと
0464デフォルトの名無しさん (ワッチョイ 1701-xa8R)
垢版 |
2020/04/20(月) 00:04:39.91ID:jmR48CvL0
>>458
アドバイスありがとうございます。

大部分(129〜159、224〜252以外)の文字変換は問題なかったですが、今一度変換方法を再確認いたします。
0466デフォルトの名無しさん (ワッチョイ bf2f-8Jcx)
垢版 |
2020/04/20(月) 00:54:15.80ID:3RmvNNii0
>>462
だから例えば130や250という数値をどういう文字にしたいんだ?

>Bitmapファイルをテキスト形式で表示したもの
普通に言うビットマップファイルはバイナリだからテキスト形式で表示なんてできないが

というか、たんにいわゆる.BMPのファイル作りたいって話じゃないのか
お前がいってるBitmapファイルってどんなんだよ
なんにせよ出力したいデータフォーマットちゃんと確認しろ
0467デフォルトの名無しさん (ワッチョイ ff8e-eUuY)
垢版 |
2020/04/20(月) 01:18:49.70ID:ayPjQ7gM0
なぜ次から次へと馬鹿が出てくるのか
0469デフォルトの名無しさん (スフッ Sdbf-Ho7r)
垢版 |
2020/04/20(月) 02:13:58.53ID:ngLECqIpd
>>462
AscUとかASCiiとか、なんでいちいち気持ち悪い書き方をするのか
こんなん入力するのも面倒だろうに
正式には全部大文字でASCII、許容範囲で小文字ascii、賛否ありそうだけど頭だけ大文字Asciiもギリ許せる、どれかにしてくれ

1文字たりとも間違いを許さない厳密さがないとプログラミングは無理だぞ
0470デフォルトの名無しさん (スフッ Sdbf-Ho7r)
垢版 |
2020/04/20(月) 02:14:21.83ID:ngLECqIpd
とにかく、説明がへたくそすぎて、何が悪いのかさっぱりわからん
動かない今のプログラムをここにそのまま書いてくれ
たぶんそれ見た方が早い
あとオシロスコープの機種名も
0472デフォルトの名無しさん (スフッ Sdbf-csEB)
垢版 |
2020/04/20(月) 03:16:22.96ID:0LewM/0Ud
たぶん、こうだな

Open "オシロ画面.bmp" For Binary Access Write As #1 'ファイル名を指定
Put #1, , 変数名 'バイト配列をそのまま全部出力
Close #1 '終了
0474デフォルトの名無しさん (スプッッ Sd3f-N0vN)
垢版 |
2020/04/20(月) 09:42:05.89ID:kpWyfGjqd
>>454
日本語が理解出来て無いバカニートはお前だろw

>要望に答えるためには、今動いてるものも解析しないと答えられるわけが無い。
>そのコ一ドが何やってるかわからずに機能追加なんてできるわけが無い。

だから>>325で四苦八苦してるんだろ。
ついでに言うと、こっちはちゃんとドキュメント残してる。
でもな、VBAの場合で今まで見聞きした前任者、前任の会社は残して無いことが非常に多い。

開発やってればそういう話、よく聞く話なんだよ。
0475デフォルトの名無しさん (ドコグロ MMdf-h94e)
垢版 |
2020/04/20(月) 09:53:56.27ID:k6bRrEuIM
>>474
マジで日本語理解できないの?
時系列ってわかる?
それとも無職の妄想だから同じ話を繰り返すしかなくなったのか?w

> まともな会社なら受ける時に調査費用と時間をもらってドキュメントを起こし直す

できてないから今アタフタしてるだけだろ
0477デフォルトの名無しさん (スップ Sd3f-N0vN)
垢版 |
2020/04/20(月) 10:04:53.07ID:8H2k4fX/d
ついでに言っとくと、正直に言えばたった今じゃねえ。
2週間程度前の話だ。
でも掲示板で、そんな説明することは無いだろ。
どーでも良い話だからな。
0479デフォルトの名無しさん (ドコグロ MM5b-h94e)
垢版 |
2020/04/20(月) 10:21:33.79ID:RWBNH8g+M
>>476-477
できてるって何が出来てるんだ?
どんどん話が壊れてるぞ

>>478
他社コードの保守はリスク高いから基本受けないし受けるとしたらそれ相応の対価を要求するなんて常識だぞ
言いなりになってそういうのを受けないと死んじゃうクズ会社なら愚痴ってないでまともに働けよw
0483デフォルトの名無しさん (ブーイモ MMcf-IW4T)
垢版 |
2020/04/20(月) 17:29:22.02ID:LK5TIQvQM
C5とD5の平方根をE5に入力する
これをC列が空白になるで行う

のシンプルなコード教えてくだせぇ
0484デフォルトの名無しさん (ワッチョイ ff8e-eUuY)
垢版 |
2020/04/20(月) 17:33:09.60ID:ayPjQ7gM0
なぜ次から次へと馬鹿が来るのか
0489デフォルトの名無しさん (ワッチョイ 5709-xa8R)
垢版 |
2020/04/20(月) 20:27:38.91ID:326Vj6040
皆様は、同一のブック内で複数のマクロがあり、それらの実行時に共通の処理を
させたいとき(実行しますか?の確認メッセなど)どういうコードを
書いておりますでしょうか。
私は開発→挿入→ボタン(フォームコントロール)にそれぞれマクロを登録して
実行させており、これらのボタンclick時に共通イベントを設定しようと
考えているのですが。非効率的でしょうか。
0490デフォルトの名無しさん (ワッチョイ 5709-xa8R)
垢版 |
2020/04/20(月) 20:30:00.63ID:326Vj6040
補足です。現在は共通処理sub作って、マクロごとにそれをcallしておりますが、
そのブックで日々マクロが増加してきており、そのcall一行すら面倒になってきました・・・
0494デフォルトの名無しさん (ブーイモ MMcf-5bTb)
垢版 |
2020/04/20(月) 23:00:14.60ID:mqB9NHYzM
Sub 関数SQRT練習() 'B2とC2の0に対してのズレ量でD2で位置度を求めこれを16行までやる。

Dim SQRT練習 As String
Dim Gyo As Long
Dim Ans As Double
Sqroot = ("SQRT練習")
Sheets(Sqroot).Select
For Gyo = 2 To 16
Cells(Gyo, 4) = Sqr(Cells(Gyo, 2), Cells(Gyo, 3)) * 2
Next
End Sub

論外ですか?もちろんピコンピコンエラーまくりです。
B1とC1がもしそれぞれ1なら2.828
それぞれ2なら5.657と
なってほしいのですがお手上げです
0495デフォルトの名無しさん (ワッチョイ ff8e-eUuY)
垢版 |
2020/04/21(火) 00:41:08.46ID:XAeWC18v0
なぜ次から次へと馬鹿が湧くのか
0496デフォルトの名無しさん (ワッチョイ b7e6-R0o5)
垢版 |
2020/04/21(火) 01:54:12.98ID:FdhLTsrP0
まさか足し算すら出来ないとは夢にも思わないじゃん
0499デフォルトの名無しさん (スップ Sd3f-8lzQ)
垢版 |
2020/04/21(火) 08:23:54.51ID:1TfDEjo0d
>>479
あ〜あ。
素人丸わかりw
SEとか、技術者の勉強してるニートかなw

できてるってのは解析する時間もドキュメント残す時間も貰ってるということ。
ということは=それにかかる費用も貰ってるということだよ。
こんなことも理解出来ないのか?

VBAの案件ってのは残念ながら能力の低い奴がやることも多く、常識が通じないことが多い。
なにしろ時給2000円とかでやってる奴も結構いるくらいだ。
俺の場合は時給換算じゃね―けど時給になおしたら最低でも1.5倍は貰わないとやってられねえ。
0500デフォルトの名無しさん (ドコグロ MM5b-Wm+M)
垢版 |
2020/04/21(火) 08:50:35.54ID:sDUb3bhdM
>>499
> できてるってのは解析する時間もドキュメント残す時間も貰ってるということ。
> ということは=それにかかる費用も貰ってるということだよ。

> 今、他人のそういうコードで四苦八苦してる。

> こんなことも理解出来ないのか?
で、何を理解しろって?
お前の頓珍漢さか?

あと3,000円/hってドヤるほど高くないぞw
0502デフォルトの名無しさん (ワッチョイ 7749-RTks)
垢版 |
2020/04/21(火) 11:40:05.07ID:Jp/GQMh30
何が分からんのか分からんから、とりあえず値2つの合計の平方根を求めるやつをかいた
シート
https://imgur.com/8uy5ETZ

Sub main1()
Dim StartRow As Long, EndRow As Long ' 処理開始行,処理最終行
Dim r As Long ' カウンタ
Dim FirstValue As Long, SecondValue As Long, SumOfValue As Long ' 値1,値2,値の合計
Dim ValueOfSquareRoot As Double ' 値の合計の平方根

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("SQRT練習")

StartRow = 2
EndRow = 6

' 指定行のみ計算。逐一セルに代入する。計算ステップは細かくしている。虚数となる場合は一律-1をセルに代入。
With ws
For r = StartRow To EndRow
FirstValue = .Cells(r, 2).Value
SecondValue = .Cells(r, 3).Value
SumOfValue = FirstValue + SecondValue
If SumOfValue > 0 Then
ValueOfSquareRoot = Sqr(SumOfValue)
Else
ValueOfSquareRoot = -1
End If
.Cells(r, 4).Value = ValueOfSquareRoot
Next
End With

End Sub
0504デフォルトの名無しさん (スップ Sd3f-8lzQ)
垢版 |
2020/04/21(火) 12:31:16.21ID:1TfDEjo0d
>>500
日本語がまともに出来ないアホには理解出来ないからお前には無理w
何を理解しろって、別にお前に対して理解しろなんて言ってないぞ。
理解出来ないアホさ加減を嗤ってるだけだw

アホだから3,000円/hに突っ込むと思ったwww
最低でもと書いてるんだが。
そもそも、そこに突っ込むんじゃ無くて2000円/hに突っ込め。
そういう所はドキュメント無しで終わってもしようが無い。
0506デフォルトの名無しさん (ドコグロ MM4b-Wm+M)
垢版 |
2020/04/21(火) 12:52:51.59ID:ADUc7MNZM
>>504
> 日本語がまともに出来ないアホには理解出来ないからお前には無理w
結局説明できなくなって理解力ガーとか低能が逃げる時によくやる手で笑うわ

まあどう言い逃れしようとしても
> 今、他人のそういうコードで四苦八苦してる。
って書いたのに突っ込まれたら何か知らんけどできてると言っちゃったアホがいた事実は消せないよw
0513デフォルトの名無しさん (ワッチョイ 9fb5-bgg0)
垢版 |
2020/04/21(火) 22:37:42.12ID:9g8Dif430
ブックをコピーするボタンを設置したくて

単純に
ActiveSheet.copy
msgbox "コピー完了"

にしてあるのですが
シートが6つある中で特定の2つのシートでそのボタンを選択すると

このシートはコピー不可 みたいなダイアログだしてコピーをしない
その他の4つのシートでは選択すると今まで通りにコピー
みたいな設定って可能でしょうか
すみません。
0514デフォルトの名無しさん (スップ Sd3f-D5eO)
垢版 |
2020/04/21(火) 22:59:56.55ID:bkj7Ha2sd
よろしくお願いします

AというブックのA1セルの値を
BというブックのリストというシートのA1からA500までで検索をし、
一致した値がある場合は同列のC〜F行の値を取得し
元のAブックのC1〜F1に貼り付けるVBAを
ご教授ください
0517デフォルトの名無しさん (ワッチョイ 77ce-Ho7r)
垢版 |
2020/04/21(火) 23:30:41.07ID:PwHPaaVD0
>>513
s = ActiveSheet.Name
Select Case s
  Case "Sheet3", "Sheet6" ' コピーできないシート名を並べる
    MsgBox "コピー不可"
  Case Else
    ActiveSheet.Copy
    MsgBox "コピー完了"
End Select
0521デフォルトの名無しさん (ワッチョイ 0791-N0F4)
垢版 |
2020/04/22(水) 11:01:53.99ID:TBrfp0e60
>>512
本当に分かってないとはw

調査費用と時間貰ってドキュメント起こすことになっても四苦八苦は変わらん。
お前はバカだから金と時間そ貰えればただ穴を掘って、その場でその穴を埋めるだけの仕事やらされても喜ぶかもしれんが、金や時間貰っても糞コ一ド読まされるのは普通の奴にゃ苦痛なんだよ。
0523デフォルトの名無しさん (ドコグロ MMa8-f1XF)
垢版 |
2020/04/22(水) 11:40:39.43ID:yd/WL25UM
>>521
> 調査費用と時間貰ってドキュメント起こすことになっても四苦八苦は変わらん。
ゴメンな、糞会社はそうなんだろうなw

>> まともな会社なら受ける時に調査費用と時間をもらってドキュメントを起こし直す

まあ、そもそもまともな会社は
>>522
>> 日本語の理解力がないのかな?
>> 自慢にもならないことをいちいち書くとかバカじゃね?

まさかと思うけど3,000円/h相当の俺スゲーとか思ってる?w
0524デフォルトの名無しさん (ドコグロ MM85-f1XF)
垢版 |
2020/04/22(水) 11:48:33.04ID:JonPflQBM
すまん途中で送信しちまった

>>521
> 調査費用と時間貰ってドキュメント起こすことになっても四苦八苦は変わらん。
ゴメンな、糞会社はそうなんだろね
お疲れ様

>> まともな会社なら受ける時に調査費用と時間をもらってドキュメントを起こし直す

まあ、そもそもまともな会社は他社の糞コードの保守なんて滅多に受けないし

で、何ができたんだ?
>>510では過去形だけど>>325では今まさにやってることになってるけど、偶然この一週間で終わったのかな?
ますます辻褄合わせが大変になってるぞw

>>522
>> 日本語の理解力がないのかな?
>> 自慢にもならないことをいちいち書くとかバカじゃね?

まさかと思うけど3,000円/h相当の俺スゲーとか思ってる?
0527デフォルトの名無しさん (ワッチョイ 0791-N0F4)
垢版 |
2020/04/22(水) 12:42:08.80ID:TBrfp0e60
>>523
プw
他人の書いたプログラム見たことすら無いとはw

まともに開発に絡んだことがあれば100人が100人他人のコードなんて読みたく無いんだよ。

引き継ぎという言葉も知らない、ググることも出来ない、保守という仕事が何をやるかも分からない。
二―トが背伸びは恥の元だぞ。
0531デフォルトの名無しさん (ブーイモ MM5e-l81y)
垢版 |
2020/04/22(水) 12:58:15.17ID:4ePZRvo/M
たびたび済みません
元のVBAのフォーマットから
新しいブックをコピーを教えて頂いたのですが
コピーする度に1回目にコピーしたブック内のシートの右に足されていく みたいな設定は可能ですか?


具体的に言うと4月分をコピー
その次に5月分、6月分とコピーすると
初回(4月分)にコピーしたブックのシート右に足されていく

さらに欲張ると元のフォーマットで4月とか5月とか特定のセルに入力した文字がそのままシート名になってくれる

すみませんがやり方ありましたら御教授を宜しくお願いします。
0534デフォルトの名無しさん (ワッチョイ 0101-g4zf)
垢版 |
2020/04/22(水) 14:31:43.03ID:YnJWUcMz0
社内システムで書類となったものの特定の場所の値とエクセルの上の特定の場所の値が合っているか照合したいです。

そういったマクロ組む場合
1. 書類をスキャナーでpdfにする。
2. pdfをocr機能使って照合に使うシートとは違うシートにデータ転記。
3. 2.でデータ転記したシートの値と確認元のシートの値を照合する。

というのがぼんやり浮かんでるんですが、1-3までの流れでよりスマートな方法があるなら上の流れをどう変えたらいいか教えていただけませんか?
よろしくお願いいたします。
0535デフォルトの名無しさん (ラクッペペ MM34-eHaU)
垢版 |
2020/04/22(水) 14:47:15.65ID:lF2YSEgcM
マクロで何とかなるスキャナーやOCRならいいんじゃないの?
0539デフォルトの名無しさん (ワッチョイ 0101-g4zf)
垢版 |
2020/04/22(水) 17:47:01.75ID:YnJWUcMz0
>>535-538
csvファイル関連のapiもかなり時間かかったので開発をつついてみます。
ocr使ってデータ転記しないと私の能力と使えるソフトやapiでは座標指定ができないから回りくどいやり方するつもりです。
今のところGoogleクラウドのocrがapi公開してるからそれにしようかなとぼんやり思ってるとこです。
アドバイスありがとうございました。
0540デフォルトの名無しさん (ワッチョイ 0791-2b7E)
垢版 |
2020/04/22(水) 18:42:39.01ID:TBrfp0e60
>>537
最低限ってのは俺が受けるとしたら最低限3000円/hは貰わないと受けないという話。

こんなの分からないのお前以外いない。
これまでのやり取りも酷いし、"引き継ぎ"についても分からない。
致命的だよ。
0542デフォルトの名無しさん (ドコグロ MM40-f1XF)
垢版 |
2020/04/22(水) 19:58:37.32ID:UdDG4RF8M
>>540
> 最低限ってのは俺が受けるとしたら最低限3000円/hは貰わないと受けないという話。
まじで言ってるのか?
勤め人ならそれでいいけどフリーだと税金や年金とかも自己負担だからやり始めた時ならともかく普通は5,000円/hでも不安だよ

> これまでのやり取りも酷いし、"引き継ぎ"についても分からない。
そういう御託は…

で、何ができたんだ?
>>510では過去形だけど>>325では今まさにやってることになってるけど、偶然この一週間で終わったのかな?

にまともなレスできるようになってからほざけよw

>>541
どこにアンカーがあるんだよw
あと>>の意味もわからんとか馬鹿すぎる
0548デフォルトの名無しさん (ワッチョイ 7cda-1Gce)
垢版 |
2020/04/23(木) 00:04:13.90ID:WrYMug8t0
で、VBAの質問なんですが、何にもないプロシージャって、何か使い道はありますか?
普通は全然意味ないと思うんですが、なんていうか0番スプライト的な感じで。

Sub Test()
End Sub
0553デフォルトの名無しさん (ワッチョイ 0791-2b7E)
垢版 |
2020/04/23(木) 02:29:45.14ID:4BIs3zJP0
>>542
バーカw
VBAで5000/hの仕事なんてあるわけ無いだろw
ニートはこれだからw

御託?
お前が"引き継ぎ"という言葉の使い方について反論出来なくなっているわけだがw
反論あるならどうぞw

>>510での過去形について、分からんのか?
レスもまともに読めないのか。
>>477を読めw

引用に>>使うアホはいない。
0555デフォルトの名無しさん (ドコグロ MM46-f1XF)
垢版 |
2020/04/23(木) 05:14:45.28ID:Bp33q84zM
> 今、他人のそういうコードで四苦八苦してる。

> ついでに言っとくと、正直に言えばたった今じゃねえ。
> 2週間程度前の話だ。

なんだそのバレバレな言い訳はw
流石に恥ずかしくないのか?

そもそもそれが本当だったとしても>>476
> 出来てるから今、四苦八苦してるんだが。
が意味不明なのは変わらんし
何ができて、何に四苦八苦してるのか書いてみ

> 引用に>>使うアホはいない。
まじでわかってないのかよ…
自分自身への引用を明示してるだけだぞ
馬鹿すぎるわ
0557デフォルトの名無しさん (ワッチョイ 0791-2b7E)
垢版 |
2020/04/23(木) 09:42:16.36ID:4BIs3zJP0
>>555
日本語勉強しろw

言い訳?
何を言ってる?
何の言い訳だよw
四苦八苦してる(た)ことに何も変わりはないぞ。
これのどこが言い訳になるんだ?

2週間前に四苦八苦してたとしても、こういう掲示板で発言する時は今四苦八苦してると発言することは十分あり得ると>>477で言ってる。
発言の主旨が変わらないからな。
そして、それがお前に何か指摘されたとか、自己弁護の為に言っているわけじゃないことは時系列から明白。

言い訳?
0558デフォルトの名無しさん (ワッチョイ 0791-2b7E)
垢版 |
2020/04/23(木) 09:51:26.69ID:4BIs3zJP0
>>555
解析する時間もドキュメント作成する時間も費用も貰っているが他人のコード解析するのに四苦八苦してるんだがね。
これのどこが変なのかさっぱり分からん。

何ができて何に四苦八苦してるかの前に、お前は俺が何が出来てないと思ってるのか言えよ。

今までの話じゃ、お前の主張は解析する時間、ドキュメント作成する時間や費用を貰うと四苦八苦することが無くなるということのようだが、そんなこたあねえぞ。
0561デフォルトの名無しさん (ドコグロ MM46-f1XF)
垢版 |
2020/04/23(木) 09:55:24.79ID:TqAmz8xEM
>>558
ドキュメント作成してるのに四苦八苦してるなら役に立たないドキュメントを作ったお前がアホなだけだけど?

あと、せめてレスを1つにまとめろよ
なぜかバカは同じ内容に複数レスで返すんだよな
まあ低能にまとめる能力を期待しても無駄かなw
0569デフォルトの名無しさん (ワッチョイ 0791-2b7E)
垢版 |
2020/04/23(木) 10:09:52.45ID:4BIs3zJP0
最低限、やり取りから解析に四苦八苦してるというのはまともな奴なら分かる筈なんだが。
とすれば、お前の言う金と時間を貰って、今まさにドキュメント起こす為の解析中(だった)なのが分かる筈。

これが前提なんだからドキュメントが既に出来上がってるなんてアホな誤解してたことは無いと信じたい。
0572デフォルトの名無しさん (ドコグロ MM46-f1XF)
垢版 |
2020/04/23(木) 10:29:06.69ID:TPtGWxWfM
>>566
専ブラで引用の引用したことないのか?
まあその手の文句は専ブラの作者に言ってくれ

>>568-569
> だから、金と時間を貰ってるというのが出来てると言ってる。
あれ?
> 調査費用と時間貰ってドキュメント起こすことになっても四苦八苦は変わらん。
って糞ドキュメントしか作成できないアホって自白してますけど?
発注した客可哀想
まあ脳内だろうから問題ないか…

> やり取り理解出来てる?
うん、どんどんボロが出てるねw
0575デフォルトの名無しさん (ワッチョイ 0791-2b7E)
垢版 |
2020/04/23(木) 11:14:19.21ID:4BIs3zJP0
というか、解析に苦労しないんだったら、糞コードなんて言葉は無い筈なんだ。
どんなコードでも誰にでも理解出来て楽に読めるんだったら、綺麗なコードを心がけるというモチベーションすら起こらない。
0577デフォルトの名無しさん (ドコグロ MM40-f1XF)
垢版 |
2020/04/23(木) 11:24:06.86ID:5d1aUYQtM
>>573-574
え゛っ、まじでドキュメント作成で四苦八苦してるって事で誤魔化せるとか思ってるの?

> 調査費用と時間貰ってドキュメント起こすことになっても四苦八苦は変わらん。
そうすると何が何と変わらんのか説明できないだろw
0579デフォルトの名無しさん (ワッチョイ 0791-2b7E)
垢版 |
2020/04/23(木) 11:32:54.64ID:4BIs3zJP0
>>577
えっ?
何度も言ってるのにまだ分からない?

「解析に四苦八苦するのは、時間とお金を貰っても変わらない」という日本語が分からない?

時間と金を貰って無くても、貰ってても、どっちでも四苦八苦はするという意味が理解出来て無かった?

日本人ですか?
0581デフォルトの名無しさん (ラクッペペ MM34-eHaU)
垢版 |
2020/04/23(木) 12:11:20.51ID:NJImmJ6MM
>>564
これから2週間が山場
0583デフォルトの名無しさん (ブーイモ MM5e-l81y)
垢版 |
2020/04/23(木) 18:35:48.75ID:9EduGPIyM
レベルの高すぎる人同士での口論はとてももったいない
俺はIf Then ElseとFor nextは辛うじて理解できそうなレベル

Do untillとかNextとかloopとか使いこなしたい条件が山ほどあって泣きそうだけど
ここの上級者たちは独学で覚えた?
同じ事やろうと調べでもどのサイトもいろんなやり方でどれが良いかも分からない

ここで聞くとさらりと答えだしてくれる人ってどういう頭の良さしてんだろ
0584デフォルトの名無しさん (ワッチョイ 0a2f-Hty+)
垢版 |
2020/04/23(木) 18:56:32.85ID:9prkr8SY0
基本的には場数
よい文章を書くには良い文章をたくさん読め
良いプログラムを書くためには良いプログラムをたくさん読めば良いんだが
まあ、よいプログラムをたくさん提供してくれる場がなぁ
0585デフォルトの名無しさん (ブーイモ MMed-l81y)
垢版 |
2020/04/23(木) 19:20:59.53ID:R7RBEdEaM
>>584
ここ見てけばまぁ覚えやすいとか無難で間違いないとかそういったサイトありますか?
広告たくさんのサイトだろうが藁にもすがりたいほど身につけたくて…ノイローゼ気味

俺の業務に絞った時にVBAで何でもやらせようと無理せずに関数はエクセルである程度制御した方が後々メンテが楽なのがわかったので

恐らくloopの使い方を理解しないと絶対に乗り越えられない大きな壁が。。
それを作れたら後は数値の変更や応用でいけそうだけど脳が焼き付いてる
0592デフォルトの名無しさん (ワッチョイ b701-Bsub)
垢版 |
2020/04/23(木) 22:53:32.79ID:nGyVitY00
VBAなんて本腰入れてテキストで勉強するにはコスパ悪すぎる言語だと思うが・・・
「VBA」にやりたいことを付けてググったソースをコピペした方が早くないか?
0593デフォルトの名無しさん (スプッッ Sd7e-1Gce)
垢版 |
2020/04/23(木) 23:13:30.67ID:/AKn5LJ4d
本を見てプログラミングを勉強する時代は終わりだと思ってる
紙の方が読みやすいと思う人が多いだろうけど、本格的にやろうとしたらオンラインのドキュメントは必須だし、
画面上で文字を読む訓練をして慣れていかないと、いつまでも能率が上がらない
0594デフォルトの名無しさん (ワッチョイ 0a2f-Hty+)
垢版 |
2020/04/24(金) 00:05:26.21ID:4FfGWszI0
>>592
とりあえず動くものが作れればいいというなら、まあそうだな

>>593
学習リソースとしては、本かWEBかに本質的な差はないと思うが
中身の問題で、WEBは本ほど系統立てて編集されていないところが多いと思う

辞書だけで外国語マスターできるような人ならWEBだけでもいいけどな
0595デフォルトの名無しさん (ワッチョイ 91ad-R0M4)
垢版 |
2020/04/24(金) 00:19:26.49ID:aTlSrVmc0
>>592
>>593
書籍の学習は今でも必要だと
思うしさらにVBAだけでなく
他言語の経験があるといいな

VBAのスレで言うのも何だが
VBAプロパーのプログラムは
垢抜けない泥臭いのが多くて
その辺PHPと同じ感触がする
0597デフォルトの名無しさん (ワッチョイ 0791-2b7E)
垢版 |
2020/04/24(金) 03:41:33.98ID:zeBff4Qi0
>>596
そうだな、取りあえず質問する時に相手に伝わるか考えながら質問した方が良いかな。

>元のVBAのフォーマット
???
これは何のこと?
何を言ってるの?

シートのコピーで書式だけコピーしたいということ?
だったらそんな機能は無いと思うから、あとは工夫でどうにかする。
Rangeの書式だけコピーはあるから、シートの追加と書式だけコピーの複合にするか、俺ならそもそもコピー元の書式を全部コードで実現してシ一トの追加とその書式を実現するコ一ドでやる。

右に追加というのが特定のシート(4月)の右というならコピーだろうがシートの追加だろうがそのものずばりの引数がある。
WorkSheets.Copy、WorkSheets.AddでクグるとMSのぺージが見つかるから、そこにサンプルもある。
一番右に追加していくというなら、上の特定のシートの部分に最後のシートを指定すれば良い。
最後のシートってのはシートの指定方法は名前と番号の2通り有るので、今回は番号で最後を表現する。
最後ってのはシート数が7個あれば7番目になる。
この場合の7個ってのはシートの個数。
シートの個数はこれまたそのものずばりのプロパティがある。
(これも上のページのサンプルそのもの。)
0600デフォルトの名無しさん (ワッチョイ d4da-1Gce)
垢版 |
2020/04/24(金) 12:06:13.25ID:EzpkTm1A0
他の人は知らんが俺は独学でコマンドマニュアル見たり参考書買ったりしてた
例えば数値でも加算を繰り返してどこでエラーがでるかとかを
実際にサンプル作って実行することをひたすら満足いくまで繰り返したりしたな
学校の勉強と並行してやってたからいつも寝不足だったし
0601デフォルトの名無しさん (ワッチョイ b701-Bsub)
垢版 |
2020/04/24(金) 16:20:00.14ID:Enw/zcBV0
>>594
学習するのに何が効率いいかっていうよりも、
VBAを学習すること自体に対するリターンって意味でコスパが悪いと言いたかった

特にオフィス製品上でしか実行できない、やりたいことは単純な事が多いっていう特性上、
学習することでググったソースのコピペ以上に得られる物はあるのか?と。

内容を理解することでちゃんとしたコードが書けるってメリットはあるかもしれないが、
VBAで綺麗なコードを書けてもねぇ・・・
VBAのコードを拘るリソースは他に回すべきだ
0602デフォルトの名無しさん (ワッチョイ 7ab5-l81y)
垢版 |
2020/04/24(金) 17:35:34.28ID:vJ3u9sjq0
Sub Macro1()
  ChDir "c:\tmp"
  f = Dir("*.txt")
  c = 1
  Do While f <> ""
    Open f For Input As #1
    For r = 1 To 6
      Line Input #1, s
      Cells(r, c) = Split(s, vbTab)(2)
    Next
    Close #1
    f = Dir
    c = c + 1
  Loop
End Sub

ここで↑の
「指定した場所に入ってる全てのテキストのエクセル化した時の特定の列と行をエクセルシートに一気に読み込む」
という神の様なコードを教わったものです。

列と行の開始はこのままでいいのですが、テキストの行が空白になるまでエクセルに読み込む
というやり方に変える事は可能でしょうか。

これが職場の環境を大きく変えすぎて2人、本当に課からいなくなって現場に飛びました。
効率化しすぎて他でも応用できるようにしろと皆の前で大声で怒鳴られ泣けても知恵が出てこない
ゆっくり本読んで覚えていきたいにもまず最優先で作れと室内であんなに大声で怒られて
ネットで調べても調べ方すらわかっていなく
異動したい、何卒すみません
0603デフォルトの名無しさん (ラクッペペ MM34-eHaU)
垢版 |
2020/04/24(金) 18:38:54.34ID:GFko4FvkM
>>601
普段の仕事がExcelならコスパいいだろ
0604デフォルトの名無しさん (ワッチョイ ae01-NnsP)
垢版 |
2020/04/24(金) 18:40:11.73ID:zODr3mBK0
一から十まですべて教わらないとできないような人はやめたほうがいいわ
実力以上のコードを教わったところで何も応用できず周囲の期待には応えられない
5chで教えてもらって作りました
これ以上は分かりませんって正直に言えばいい
0611デフォルトの名無しさん (ワッチョイ 211f-unif)
垢版 |
2020/04/25(土) 00:25:36.55ID:gc0CgTOT0
画像上部の21〜20日間隔の日付のセルの塗り潰しを下の1〜30日間隔の日付に塗り潰し変えたいんですがどうしたらいいですか?

・上部をforで2行目の最終列までループ
・ifで塗り潰し判定がTrue
・???
・???
・下部をforで2行目の最終列までループ
・ifで対象年月日間隔だったら塗り潰す

と、こんなイメージなのかなと思ってはいるんですが、??らへんの処理がわかりません。

https://i.imgur.com/I6hiP5r.png
0613デフォルトの名無しさん (ワッチョイ 1e09-Btmo)
垢版 |
2020/04/25(土) 00:36:47.04ID:8o24J96M0
Functionの任意引数(Optional)なのですが、初期値はstringかlong型のみだけしかダメなのでしょうか?
シート名objectの引数で、省略したときにActivesheetを返したいのですが、「定数式が〜」のエラーが出てしまいます。
やはり、IFとIsMissingを使うしかないでしょうか。

Function test(Optional objシート名 As Worksheet = ActiveSheet)
End Function
0619デフォルトの名無しさん (ワッチョイ 4c2c-Hty+)
垢版 |
2020/04/25(土) 00:58:07.71ID:a/EKdpBi0
>>602
Ruby なら、row.empty? で空行かどうか、判別できるけど

require 'csv'

CSV.foreach( "input.csv" ) do | row | # 1行ずつ処理
break if row.empty? # 空行なら、終了

puts "#{ row[ 0 ] } : #{ row[ 1 ] }"
end

入力ファイル・input.csv
あ,いう
a,bc

1,23

出力
あ : いう
a : bc
0620デフォルトの名無しさん (ワッチョイ acce-1Gce)
垢版 |
2020/04/25(土) 01:41:16.85ID:7EOq2zNJ0
>>602
読み込みを止める条件が空行とEOFの2つになると、とたんに処理が面倒になるんだよな
こういう時はLine Inputを別Functionに飛ばすとすっきりするんだけど、とりあえず汚い方法で書いてみた

Sub Macro1()
  ChDir "c:\tmp"
  f = Dir("*.txt")
  c = 1
  Do While f <> ""
    Open f For Input As #1
    s = "s"
    r = 1
    Do While Not EOF(1) And s <> ""
      Line Input #1, s
      If s <> "" Then Cells(r, c) = Split(s, vbTab)(2)
      r = r + 1
    Loop
    Close #1
    f = Dir
    c = c + 1
  Loop
End Sub
0622デフォルトの名無しさん (ドコグロ MM46-f1XF)
垢版 |
2020/04/25(土) 05:53:44.03ID:SWq+pauNM
>>613
If 文使うしかないのはその通りだけど IsMissing() は引数の型を Variant にする必要があるのであまり良くない

Function test(Optional objシート名 As Worksheet = Nothing) ' Nothing は既定値なので指定しなくてもいい
If objシート名 Is Nothing Then Set objシート名 = ActiveSheet
End Function

ってやるのが定番
ググると同じことをやってる人がいる
http://akashi-keirin.hatenablog.com/entry/2018/03/01/081945
0623デフォルトの名無しさん (ワッチョイ 211f-unif)
垢版 |
2020/04/25(土) 13:56:29.68ID:gc0CgTOT0
>>616
>>617
名前は下にたくさん羅列してるし、日付も右にもっとずっとあるからVBでやりたい。
日付間隔が上下で違うからどうやったらいいかと思って。

for 上部名前シートループ
 for 下部名前シートループ
  if 名前同一
   for 上部名前年月日列ループ
    if 塗り潰し
     ※下部シート塗り潰し
    end if
next
end if
next
next

※の部分がどう書くのかがわかりません。

>>618
塗り潰す条件は同じ名前の人に対して同じ日付の所へ塗り潰す。
0626デフォルトの名無しさん (ワッチョイ bb5e-1Gce)
垢版 |
2020/04/25(土) 20:10:34.52ID:Z1BPhcf20
下記のコードで出力範囲1と2をまとめるにはどうすればいいでしょうか
Set OutputRange = Worksheets("Sheet1").Range("B2:C10")
For i = 1 To 9
For j = 1 To 2
For k = 2 To 3
OutputRange(i, j) = WorksheetFunction.VLookup(SerchKey(i, 1), SerchRange, k, False)
だとB,C列ともに列番号3をの値になる、というか列番号2で処理した後列番号3でもう一度処理を
しているため、すべて列番号3の値になるんじゃないかとは思うのですが、具体的にどう直せば
いいか教えていただけるとありがたいです

Sub Test()

Dim SerchKey As Range '検索値
Dim SerchRange As Range '検索範囲
Dim OutputRange1 As Range '出力範囲1 B列
Dim OutputRange2 As Range '出力範囲2 C列
Dim i As Long

Set SerchKey = Worksheets("Sheet1").Range("A2:A10")
Set SerchRange = Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A2:C10")
Set OutputRange1 = Worksheets("Sheet1").Range("B2:B10")
Set OutputRange2 = Worksheets("Sheet1").Range("C2:C10")

For i = 1 To 9
OutputRange1(i, 1) = WorksheetFunction.VLookup(SerchKey(i, 1), SerchRange, 2, False)
OutputRange2(i, 1) = WorksheetFunction.VLookup(SerchKey(i, 1), SerchRange, 3, False)
Next i

End Sub
0629デフォルトの名無しさん (ワッチョイ 7c7c-sVZV)
垢版 |
2020/04/25(土) 21:14:48.21ID:OxGSjC7Q0
あ、質問の意味が今わかったわ
入れるセル変えずに関数の列番だけ変えてたらそりゃ同じ値しか入らない
中身がどうなってるか想像じゃなくて実際に確認すればどう直せばいいかわかるだろう
0630デフォルトの名無しさん (ワッチョイ bb5e-1Gce)
垢版 |
2020/04/25(土) 22:19:20.97ID:Z1BPhcf20
質問が説明不足だったようで失礼しました
出力範囲が複数列ある場合にそれぞれの列を「出力範囲1」「出力範囲2」と設定していけばいいという
ところまではわかったのですが、検索範囲が100列、出力範囲が99列、というように数が多くなった場合、
出力範囲のB列には検索範囲の列番号2  OutputRange1(i, 1)…… SerchRange, 2
出力範囲のC列には検索範囲の列番号3  OutputRange2(i, 1)…… SerchRange, 3
出力範囲のD列には検索範囲の列番号4  OutputRange3(i, 1)…… SerchRange, 4



という処理を99行書かずに変数で処理できないでしょうか、というのが質問の意図です
0633デフォルトの名無しさん (ワッチョイ acce-1Gce)
垢版 |
2020/04/26(日) 00:49:06.95ID:1a87l4R/0
>>630
同じような処理を繰り返したい時は配列を使う

Dim OutputRange(10) As Range '出力範囲
Dim i As Integer

For i = 2 To 3
Set OutputRange(i) = Worksheets("Sheet1").Range(Cells(i, 2), Cells(i, 10))
Next

みたいな感じで、変数を使えば、何十個あっても簡単にまとめられる
0637デフォルトの名無しさん (ワッチョイ 2c7f-KNAb)
垢版 |
2020/04/26(日) 10:18:45.13ID:LS9zyJ5J0
複数あるコマンドボタンをどれを押しても一つの処理に入り、押されたボタンを取得して、ボタンごとに判断処理ってできないのでしょうか。(activeXです)

具体的にはシリアルポートの処理で以下のことをやりたいです。
コマンドボタンが機器名、その機器ごとに存在する複数のコンボボックスにポート名やボーレートを設定。
あるコマンドボタンを押したら、対応するコンボボックス郡の設定を取得してポートを開く。(ポートオープンはモジュールに記述したWritefileでやってます)
ポートオープンで返ってきたハンドラが例外でなければ、押されたコマンドボタンの色を変更し、名前を"機器名+接続中"に変更。
また、コマンドボタンを押した時点で対応ポートのハンドラが存在すれば、そのポートを閉じて(ハンドラも初期化)、押されたコマンドボタンの色を戻す。

現在はボタンごとのプロージャを作成し、同じような処理を逐一書いてますが、機器が複数あって大変見にくいのと、記述が大変なのでまとめたいです。
0645デフォルトの名無しさん (ワッチョイ 2c7f-KNAb)
垢版 |
2020/04/26(日) 14:41:44.01ID:LS9zyJ5J0
>>642
紹介頂いたサイトの大元になるmougを参考にして押したボタンの色変えぐらいまでしかできません
この処理にシート画面上のコンボボックスの値を関連付けて取得する仕掛を入れたいのですが検討つかず
0647デフォルトの名無しさん (ワッチョイ 7ab5-l81y)
垢版 |
2020/04/26(日) 18:40:06.52ID:IAQJrydO0
全部ここの人達のおかげで完全に憑き物が取れて教えて貰ったURLと持ってる本を参考にひたすら初歩のルールから愚直に
打っては実行を繰り返し練習してます

Do loop
For next
特にこれの破壊力は凄いですね
これだけの為に覚える価値すらあると感じました
あとはmsgboxの使い方の面白さ
感謝しかないです

Do loopでwhileとuntilがあるけどよほど複雑でない場合
書き方変えるだけで同じ処理させられる感じですが
基本どっちかでで使い方覚えていったほうがいいものですかね
質問というよりただただ楽しくここの上級者たちにも癖だったり自分ルールがあるのかなと
ああ楽しい
0650デフォルトの名無しさん (ワッチョイ 7ab5-l81y)
垢版 |
2020/04/26(日) 20:25:45.60ID:IAQJrydO0
>>649

Sub ループwhile()
 Dim i As Long
  i = 1
 Do While Cells(i, 1) <> ""
 Cells(i, 3) = Cells(i, 1) + 10
 i = i + 1
 Loop
 MsgBox i & "回whileでループ"
End Sub

Sub ループuntil()
 Dim i As Long i = 1
 Do Until Cells(i, 1) = ""
 Cells(i, 3) = Cells(i, 1) + 10
  i = i + 1
 Loop    
 MsgBox i & "回untilでループ"
End Sub

なるほど、空白になるまでループってのを練習してました
後者の方が一般的ですかね
勉強になります。
0651デフォルトの名無しさん (アウアウエー Sa6a-WAKu)
垢版 |
2020/04/26(日) 21:08:58.39ID:RAbG8RW6a
僕は wihle しか使わない
理由は c言語にないから

あと、なんとなくだけど、wihle と until は混ぜて使わない方がよい気がする

いや、混在する人がいても文句は言わないと思うけど
0658デフォルトの名無しさん (ワッチョイ 0a2f-Hty+)
垢版 |
2020/04/27(月) 00:02:40.85ID:pzY5bj450
>>656
VBAでは、それはDo側に書くかLoop側に書くか

WhileかUntilかはその条件の意味的なもので使い分けるのが本筋だろうけど
書くときの話ならどちらかに統一するルールでも良いと思う
0659デフォルトの名無しさん (ワッチョイ ca56-nG0h)
垢版 |
2020/04/27(月) 00:32:05.13ID:7P4A4QOo0
シート1のA1セルにx1、x2、x3と設定し、このx1〜x3をそれぞれx1をB1セルに設定されている値、x2をC2セルに設定されている値に置換するにはどのようにすればよいのでしょうか
Replaceでは検索文字列および置換文字列を一つずつ指定できないため、検索したい文字列が増えるたびに処理が無駄に増えてしまうように思うため効率的なやり方を教えていただきたいです
0661デフォルトの名無しさん (ワッチョイ ae63-V/Lh)
垢版 |
2020/04/27(月) 04:12:22.78ID:NMjdVbpJ0
置換と言ってるからセル参照ではない事だけわかった
0663デフォルトの名無しさん (ワッチョイ 91ad-R0M4)
垢版 |
2020/04/27(月) 05:03:04.57ID:Nsh172gi0
>>647
IF文、For文と配列で簡単な処理はこなせる
上級者はまた別のパラダイムで書いているが
先走る必要もなく基礎を確実に身につけよう

>>654
ド・モルガンは定理になることが多いが
そうなるのは公理系しだいだから
名前がおかしいと感じたことはない
0664デフォルトの名無しさん (ワッチョイ 6ee6-eHaU)
垢版 |
2020/04/27(月) 06:05:48.59ID:XYadQOO00
>>659
非効率なコードを上げてくれ
0667デフォルトの名無しさん (ブーイモ MMfd-KNAb)
垢版 |
2020/04/27(月) 09:24:40.63ID:JVYKLC34M
ワークシート名をsheet(i)みたいな感じで配列に格納して、
for i=i to X
sheet(i).cell(row,col) = data
next
の様な、ループで各シートのセルに値を代入する方法を教えていただけないでしょうか。
0670デフォルトの名無しさん (ワッチョイ 0101-K+B8)
垢版 |
2020/04/27(月) 13:38:56.30ID:JH5ykH9R0
・ツールの作成
・バク対応、修正業務
・各種テスト
VBAを用いて上記の業務を行う場合、皆さん(自分の取り巻く環境以外)の現場で求められる頻度や重要度が高いスキルや業務を伺いたいです。
よろしくお願いします。
0671デフォルトの名無しさん (ワッチョイ 968e-RPvb)
垢版 |
2020/04/27(月) 15:07:52.31ID:VtI6ihiD0
>>670
馬鹿は死ね
0673デフォルトの名無しさん (ワッチョイ d8cc-1Gce)
垢版 |
2020/04/27(月) 15:35:59.76ID:MOHWKMXM0
>>667
シート名は普通に列挙したいんだと思った
コード内に記述したいのか: sheet=Array("hoge","fuga","piyo","puyo")
セル内に記述したいのか: sheet=WorksheetFunction.Transpose(WorkSheets("hoge").Range("a1:a4"))
どうか、わかんないけど
0680デフォルトの名無しさん (ワッチョイ 6ee6-eHaU)
垢版 |
2020/04/27(月) 19:15:08.58ID:XYadQOO00
昔は「値で貼り付け」とかキー割り当てしてたけど最近のは割と便利になったから使ってないな
他には初回印刷日の挿入とか
ファイルプロパティにタイトルの設定とかかな
0681デフォルトの名無しさん (ブーイモ MMfd-enkp)
垢版 |
2020/04/27(月) 20:04:15.02ID:GiQWIPCuM
「値で貼り付け」に関して最近のはどう便利になってるの?
0684デフォルトの名無しさん (バットンキン MM0a-N7dq)
垢版 |
2020/04/27(月) 20:34:34.60ID:z3LiCQZGM
配列を使った方が良い場合ってどんな時?
0687デフォルトの名無しさん (ワッチョイ 7a4b-R0M4)
垢版 |
2020/04/27(月) 23:26:56.58ID:g7wz6Zov0
ここの人ら凄い、
いつも感心しながら読んでるけど本当に勉強になる。
これだけ知識や経験あるならユーチューバ―とかになって上手くやれば副業も出来そう
0690デフォルトの名無しさん (ワッチョイ 64ad-Btmo)
垢版 |
2020/04/27(月) 23:42:25.59ID:RTbdScdC0
VBAを本を読んだりググったりして勉強中です。
他社システムからいただくCSVファイルをExcelに取り込んで編集する必要があります。
頭にゼロが付いて、長さが不定の数字のフィールドがあるので、そこは文字列で
扱わなくてはならず、そのままExcelで開けません。
querytables.add でインポートしてみたところ、セル内改行の含まれる列があるため、
1行であるべきデータが2行になってしまいます。
POWERQueryを使えば回避できる、という情報にに突き当たり、とりあえずマクロの
記録をしてみて、使えるように変えられないか、と思いましたが行き詰っています。
「ソース = Csv.Document(File.Contents(””CSVのパス””),… 」
のCSVのパスの部分を変数にしたいのですが、変数にすると
「 .Refresh BackgroundQuery:=False」のところで
[Expression error] インポート 変数 がエクスポートと一致しません。モジュールの参照が漏れていませんか?」
と親しげだけど、冷たく突き放されます。
知識が足りなさすぎるのですが、データをきれいにして早く次の処理を作らなくては
いけなくて焦っています。
先輩たちはテレワークで、あまり質問もできず困っております。
どうぞよろしくお願いいたします。
0692デフォルトの名無しさん (ワッチョイ 4c2c-iUOt)
垢版 |
2020/04/28(火) 01:18:35.72ID:7QVY/xgO0
>>690
Ruby なら、以下をscript.rb に書いて、
CSV データを、input.csv に書いてある時、

ruby script.rb input.csv
と、シェルで実行すると、

require 'csv'

file_path = ARGV[ 0 ] # 引数には、CSVファイルパスを渡す。input.csv

# CSV ファイルを、1行ずつ処理する
CSV.foreach( file_path ) do |row|
puts "#{ row[ 0 ] } : #{ row[ 1 ] }"
end

入力・input.csv
あ,いう
a,bc

出力
あ : いう
a : bc
0693デフォルトの名無しさん (ワッチョイ 7ab5-l81y)
垢版 |
2020/04/28(火) 02:18:31.92ID:wtscQEd50
Sub ループuntil()
 Dim g As Long
  g = 3
 Do Until Cells(g, 2) = ""
 Cells(g, 6) = Cells(g, 2) + Cells(g, 3) * 10
 g = g + 1
 
 Loop Dim ms As String
 ms = MsgBox(g & "回ループ", vbYesNo, "どうやら")

 If ms = vbYes Then
 MsgBox "更に練習", vbYesonly, "じゃあ"   Else
 MsgBox "論外", vbYesonly, "てめーは"   
 End If
End Sub

何とか練習しつつ
ここにきてデータ型が逆に混乱してきましたわ
バリアントでごまかそうかな
おやすみなさい
0695デフォルトの名無しさん (ワッチョイ acce-1Gce)
垢版 |
2020/04/28(火) 03:02:31.63ID:OG4s1hHd0
>>693
これ、そこらの入門書にはなかなか書いてないんだけど、MsgBoxの結果はVbMsgBoxResultという特殊な型なので、変数msはこう宣言するのが正解

Dim ms As VbMsgBoxResult

この宣言を書いてからコードを書くと、

If ms =

ここまで入力すると自動的に、vbYesとかvbNoなどの選択肢が出てくる
0696デフォルトの名無しさん (ワッチョイ 66e6-iUOt)
垢版 |
2020/04/28(火) 04:56:00.09ID:Ok+k67Xa0
Select Case "CSVファイルをExcelに取り込む"
Case "直接開く"
MsgBox "0 padding"
Case "querytables"
MsgBox "inline CR"
Case "POWERQuery"
MsgBox "Syntax Error"
Case "先輩たち"
MsgBox "テレワーク"
Case "2ch"
MsgBox "ググレカス"
Case "自分"
MsgBox "勉強中"
End Select
0700デフォルトの名無しさん (スッップ Sd70-bbQE)
垢版 |
2020/04/28(火) 08:27:27.46ID:F6rfqhbJd
>>684
速度アップの為にあえて使うのはVariant配列。

配列にすることに全く違和感が無いので、"あえて"使うことが少ない。
配列にするのに自然なことがたくさんあるし、普通に使ってる。
0703デフォルトの名無しさん (ブーイモ MM5e-43Dx)
垢版 |
2020/04/28(火) 17:53:56.69ID:YPs9lugpM
Sub テキスト抽出()
  ChDir "c:\tmp"
  f = Dir("*.txt")
  c = 1
  Do While f <> ""
    Open f For Input As #1
        Line Input As #1,s
    s = "s"
    r = 1
    Do While Not EOF(1) And s <> ""
      Line Input #1, s
If s <> "" Then Cells(r, c) = Split(s, vbTab)(5)
    r = r + 1
    Loop
    Close #1
    f = Dir
    c = c + 1
  Loop
End Sub
0704デフォルトの名無しさん (ブーイモ MM5e-43Dx)
垢版 |
2020/04/28(火) 18:04:37.39ID:YPs9lugpM
ここで教えて頂いた>>703の「指定Path内の全txtデータのF列2行目から下に数値が続く限りシートに全部抽出する」コードのお陰で憑き物が取れて運用してるのですが
たまに画像の様な他の列に行がはみ出したデータがあると

実行時エラー'9':
インデックスが有効範囲にありません
で止まりますが

これを「他の列がどうだろうがtxt内のF2から下に数値が続く限り抽出」
に改良するのは難易度高いですか?
というかコードで可能でしょうか
入門編の本には載って無く数字変えたりwhileの位置変えたりしてますが簡単にいくはずもなく
参考になるサイトなどありましたら教えて頂けませんでしょうか

↓こんなデータが混じってるとエラーで止まります
https://i.imgur.com/194ePDL.jpg
0706デフォルトの名無しさん (ワッチョイ 7a4b-R0M4)
垢版 |
2020/04/28(火) 18:35:05.50ID:yXtY+D7s0
>>689
元々有名な人なんだね。
投稿動画多くてあれこれクリックしてるうちにどんどん登録者数が伸びてったからビックリした。
最初見た時は5000ぐらいだったのに、さてどこまで伸びるかな。
0707デフォルトの名無しさん (ワッチョイ 38ef-1Gce)
垢版 |
2020/04/28(火) 19:06:29.99ID:fDIatR4a0
>>704
>If s <> "" Then Cells(r, c) = Split(s, vbTab)(5)
この行、最後に(5)ってついてるでしょ
読み込んだデータに5+1番目(0スタートだから+1)の要素が無かったら、どうなると思う?

ここは、splitの結果を一旦配列変数に受けて、配列の大きさを確認する判定をいれるといいよ
実を言えば、s<>"" の判定も不要だったりもする
0708デフォルトの名無しさん (ワッチョイ 048f-1Gce)
垢版 |
2020/04/28(火) 19:48:07.59ID:uR1kyCkX0
都道府県別の7日移動平均線を出すグラフ組めないかなあと
思って、「都道府県別の日々新規感染者数」を探したけど見つからん…。

なんで役人は pdf にしたがるんだろう。
0709デフォルトの名無しさん (ブーイモ MMed-43Dx)
垢版 |
2020/04/28(火) 20:13:54.22ID:ZPYYxv13M
>>707
正直ほとんどさっぱりわからないです。
が、ありがとうございます。そこらへんをいじればなんとかしろなりそうってことですかね。
まだ変数の使い方もよくわかってないのでsplit関数で検索して集中的に勉強していじれるようにがんばります。
0713デフォルトの名無しさん (ワッチョイ ae63-0s/K)
垢版 |
2020/04/28(火) 23:21:24.84ID:7mVXavmj0
>>708
各都道府県毎にオープンデータでCSV配布してるのに何言ってんだ?
0714デフォルトの名無しさん (ワッチョイ e709-LlFz)
垢版 |
2020/04/29(水) 01:03:36.89ID:j7HdUAEO0
VBAから参照設定をせずにoutlookを操作しようとしていますが、
「Set mailItemObj = oApp.CreateItem(oApp.olMailItem)」のところで、
「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」と
エラーが出てしまいます。どうすれば解決できますでしょうか。。。

Sub sendmail_sample1()
Dim oApp 'As NEW Outlook.Application OutlookのApplication
Dim myNameSpace 'As Outlook.NameSpace
Dim myFolder
Set oApp = CreateObject("Outlook.Application") 'VBAで参照設定をした場合は不要
Set myNameSpace = oApp.GetNamespace("MAPI")
Set myFolder = myNameSpace.GetDefaultFolder(9)
'---コード1|outlookを起動する
Dim toaddress As String '変数設定:To宛先
Dim subject As String '変数設定:件名
Dim mailItemObj 'Outlookで使用するオブジェクト生成
'---コード2|差出人、本文、署名を取得する---
toaddress = Range("B2").Value 'To宛先
subject = Range("B5").Value '件名
'---コード3|メールを作成して、差出人、本文、署名を入れ込む---
Set mailItemObj = oApp.CreateItem(oApp.olMailItem) '★★★ここでエラー
mailItemObj.BodyFormat = 3 'リッチテキストに変更
mailItemObj.To = toaddress 'to宛先をセット
mailItemObj.subject = subject '件名をセット
'---コード7|outlookを閉じる(オブジェクトの解放)---
Set oApp = Nothing
Set mailItemObj = Nothing
End Sub
0718デフォルトの名無しさん (ワッチョイ e709-LlFz)
垢版 |
2020/04/29(水) 01:40:00.70ID:j7HdUAEO0
>>714です。自己解決いたしました。
olMailItemを値指定でゼロ(0)にしたらできました。。。
謎ですが。。。ありがとうございました。。。
0721690 (ワッチョイ a7ad-LlFz)
垢版 |
2020/04/29(水) 09:22:41.65ID:sSCyRYOw0
>>690です。
みなさんありがとうございました。
もっと勉強します。
>>696
ちょっと楽しい気持ちになりました。恩に着ます。
0722デフォルトの名無しさん (ブーイモ MMcb-EVni)
垢版 |
2020/04/29(水) 18:51:15.87ID:IoQm9XvmM
msgboxの使い方
inputboxの使い方
Do loop
For next
if then else
初歩だけどここらを色々繰り返し勉強してると楽しい
msgboxは使い方もっと応用していきたい
楽しみながら勉強するといいですね
他にもっとお勧めの処理ありますかね。

あとさらに低レベルな疑問なんですが
vbYesNo
vbOkCancel

これってみんな細かに使い分けます?
タイトルとメッセージで誘導してあげて
elseで何もしないにするとほぼ通じちゃいますよね
これも使い分け必須だったりするのでしょうか
0725デフォルトの名無しさん (ワッチョイ a78e-DBwA)
垢版 |
2020/04/29(水) 23:54:48.02ID:GcIsSLnW0
>>722
そろそろ馬鹿は死ね
0727デフォルトの名無しさん (JP 0H8f-sYkk)
垢版 |
2020/04/30(木) 02:12:11.10ID:e+nUl/nvH
同意
VBAは使わなくていいなら使わない方が望ましいわけで、
おすすめと言われると「まずはVBAを使わなくてよい方法を考えること」としか言いようがない
0730デフォルトの名無しさん (ワッチョイ df01-lZTE)
垢版 |
2020/04/30(木) 03:50:06.96ID:HupizHgZ0
数式だとすぐぶっ壊されてその修正に手間がかかるのでVBA使うのが好き
仕方なく数式に頼ったとしても、数式を一括修正できるボタンとかVBAで作っちゃってる
数式入ってるセルに保護かければいいじゃんって思うだろ・・・・
そうするとな、なんでここには入力できないんだよ!ってクレームがな、
いや、そこはここのシートのこの値が転記されるようになってて・・・とかいう説明を聞き入れる輩じゃないんだ
0731デフォルトの名無しさん (ワッチョイ c7ce-ts7H)
垢版 |
2020/04/30(木) 04:08:29.30ID:mLi4d9n50
人に渡すブックなら、VBAは消してシートはバックアップを取っておく
何やったっていじるやつはいじるし文句を言うから、結果だけを渡すようにしとかないと
0732デフォルトの名無しさん (ワッチョイ e7ad-GPK9)
垢版 |
2020/04/30(木) 04:41:41.42ID:HvDy85U60
>>722
>お勧めの処理
VBAが初心者でも簡単に扱えるのは
エクセルというGUIがついてるから

だけど普通のCUIプログラミングも
できると技術的に幅が広がるだろう

たとえばPythonとかRubyとかでね
0734デフォルトの名無しさん (ワッチョイ c763-+JA7)
垢版 |
2020/04/30(木) 06:40:13.36ID:PqPYAyi70
まぁ関数でできる処理は関数でした方が処理自体速いんだけどな
悩ましいけどセル保護だけじゃなく列や行を隠しとかもするけど、いじる人は何しようと結局いじるからね…

VBAと関数で使い分けしないとVBAはどんだけCPUのコア数あっても1コアでしか動作しないから、重たい処理になると頭打ちになる
0735デフォルトの名無しさん (アークセー Sx5b-apiA)
垢版 |
2020/04/30(木) 07:48:59.33ID:OrbFqVlKx
ワークシート関数が処理の全体像が不明っていってる奴はたぶん関数がセル内できるのを知らないとか、テーブル機能を知らないとか、たぶんそんな感じだろう
ワークシート関数もVBAも下手くそに作ればカオスになる
0736デフォルトの名無しさん (ブーイモ MMcf-EVni)
垢版 |
2020/04/30(木) 08:27:32.50ID:/wWgOKjWM
なるべく関数はエクセル内で完結させてる
何かの呼び出しや処理のみにVBAにやらせてる
マスター版を個人で持っておく
いじられてもよほどのことが無い限り知らんふり
0738デフォルトの名無しさん (アークセー Sx5b-apiA)
垢版 |
2020/04/30(木) 09:38:23.87ID:OrbFqVlKx
ワークシート関数の見通しが悪いのはシートの使い方や関数の書き方が悪いから

テーブルで構造化参照させる
多重ネストをしないように作業列を積極的に使う
多重ネストが避けられない場合ははセル内改行する
静的変数として固定セルを参照する場合は名前付きセルにする

こういう配慮をしているかどうかが大切

可読性はVBAと大差ない
VBAだって下手に書くと二度とメンテナンス出来なくなる
0739デフォルトの名無しさん (JP 0H8f-sYkk)
垢版 |
2020/04/30(木) 10:14:10.91ID:dUO320lFH
>>737
VBAだけ見りゃ理解できるように書いてあるんならいいさ
ハイスキルな君の書くVBAもきっとそうなのだろう
ただ、世の中のほとんどのVBAマクロはワークシートのレイアウトに激しく依存しており、
シートと見比べないと意味不明だし簡単に壊れる
0744デフォルトの名無しさん (ワッチョイ 671d-sUpK)
垢版 |
2020/04/30(木) 23:50:21.31ID:b9TIw4B40
実務経験1年で月収80万稼げるエンジニアになった理由
https://www.youtube.com/watch?v=DrbbyGsHQic
意識が低いエンジニアこそフリーランスになれ
https://www.youtube.com/watch?v=nSEaAJlgjbQ
フリーランスエンジニアの週3労働ってどんな感じ?
https://www.youtube.com/watch?v=8yjoDCdbzMc
ぼくがスキルのない社畜ならこうやって脱する
https://www.youtube.com/watch?v=aae8xxbUlMM
初めて人を雇ったらもう二度とサラリーマンをやりたくないと思った話
https://www.youtube.com/watch?v=U0OCGRVLFsM
プログラミングは文系でも余裕で出来ます!理由を現役プログラマーが解説
https://www.youtube.com/watch?v=iBOeiSKBIW8
貧乏人こそ社会不適合者
https://www.youtube.com/watch?v=O3BT72BIBJI
元ド貧乏が教える】貧乏を抜け出すための2つの考え方
https://www.youtube.com/watch?v=IRrCgTy3ckc
より良いオファー貰ってるのに転職しないとか何考えてるの?
https://www.youtube.com/watch?v=i0J6uRhlj7o
0745デフォルトの名無しさん (ワッチョイ a7f1-trzR)
垢版 |
2020/05/01(金) 00:54:45.32ID:+DHzH5tv0
>>744
この人タイでエッチするため在宅プログラマーになったって言ってるけど
うらやましいな
0747デフォルトの名無しさん (ワッチョイ dff0-h83k)
垢版 |
2020/05/01(金) 10:00:32.66ID:6b7IUzcd0
Sub Sample2()

Dim Date1 As Date
Dim Date2 As Date
Dim i As Long

Date1 = "2018/1/1"
Date2 = "2018/4/30"

For i = 0 To DateDiff("d", Date1, Date2)

Cells(i + 1, 1) = DateAdd("d", i, Date1)
Exit For
Next i

End Sub

VBA初心者です
上記を実行すると強制終了してしまいます
どうしてなんでしょうか?
0750デフォルトの名無しさん (アウアウエー Sa9f-kSwD)
垢版 |
2020/05/01(金) 13:10:21.56ID:n1w4ahs6a
#で括ってみては
0751デフォルトの名無しさん (JP 0H9f-r+sk)
垢版 |
2020/05/01(金) 14:08:14.73ID:Lu25V/ckH
学術巨大掲示板群: アルファ・ラボ
ttp://x0000.net

物理学 化学 数学 生物学 天文学 地理地学
IT 電子 工学 国語 方言 言語学 など

PS 連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
0752デフォルトの名無しさん (ワッチョイ 67ac-fZS3)
垢版 |
2020/05/01(金) 14:08:57.29ID:GU+C/Jnt0
>>747
回答としては748の通り

なぜこうなるのかわからない場合
 ・ブレークポイントを使ってどういうふうに処理が進んでいるか確認してみ?
 ・気になる行をコメントアウトをしてみる

などをするがよろし
0753デフォルトの名無しさん (ワッチョイ a78e-MvRk)
垢版 |
2020/05/01(金) 15:46:49.34ID:O26w7br10
どうして馬鹿ばかり来るのか
0754デフォルトの名無しさん (ラクッペペ MM8f-aR2J)
垢版 |
2020/05/01(金) 15:48:19.31ID:e9rmxAXgM
>>753
ようこそ!
0760デフォルトの名無しさん (ワッチョイ a78f-h83k)
垢版 |
2020/05/02(土) 09:40:27.37ID:7uDOF2SH0
IE自動操作のマクロで

今まで動いていたが動かなくなる

コードに変化を加えると動く
(スペースでも改行でもコメントでも、プロシージャに変化があると動くようになる)

これはどういうあれなんや
0762デフォルトの名無しさん (ワッチョイ a7ad-ur4w)
垢版 |
2020/05/02(土) 11:30:23.32ID:Z+zF8E0a0
PowerQueryをVBAで使いたい初心者
>>690です。
変数に入れるファイルパスを、テーブルにしておかないと
PowerQueryは読んでくれないんだ。そのテーブル名とか列名も
指定するんだ、へ~、という現状からこの連休中に抜け出したいです。

テレワークからの連休突入前に先輩たちに投げた質問の答えは
「zoom飲み会やるから、入れとけよ。」でした。
0763デフォルトの名無しさん (ワッチョイ dfb5-EVni)
垢版 |
2020/05/02(土) 11:33:04.58ID:qrZctUhv0
VBAむずいが努力だわ
昇級幅が大きい時代の残りカスの50代の職場のおっさん達が給料ばっかり高くて
ExcelのSUM関数すらわからないレベルで
電卓で計算してテンキーで手打ち
そんな信じられない存在がいる職場
「俺のやり方があるんだよ!」
とか、心の底から腹が立つ
大手で組合もあるからリストラはされないんだが
そんなやつを駆逐したい
エクセル関数は職場で使うものはだいたい使っておっさん共の10倍は早くやってきたが
更なる憎しみだけが俺のVBA勉強へのモチベーションになってる
0764デフォルトの名無しさん (ワッチョイ 2791-x7Cl)
垢版 |
2020/05/02(土) 11:34:32.51ID:jcfx6zQ80
>>760
そもそも、どう動かなくなるんだ?
エラーが出るのか?
Excel再起動で動くようになるか?
PC再起動で動くようになるか?

昔よくあったのがデバックやStopのように勝手に途中で止まるという奴。
F5で続行出来るんだけどまた途中で止まる。
Excelの再起動では治らんがPC再起動で治る。
0765デフォルトの名無しさん (ワッチョイ c7ce-ts7H)
垢版 |
2020/05/02(土) 11:44:58.03ID:u3ozWGyy0
>>760
Win10ではIEの動作が変わったのでVBAからコントロールするのがかなり大変になった

うまく動かない時は、ブラウザのキャッシュとかクッキーとか、WEBサーバの応答のタイミングとか調べる
変更しなくても時間を置けば動かないか、Excelを再起動したらどうか、パケットモニターとか調べた?
0766デフォルトの名無しさん (アウアウカー Sa3b-QanA)
垢版 |
2020/05/02(土) 11:52:59.52ID:be7YjfFea
初めてのマクロでやりたいことはほぼ出来たのですが、新規ブックをコピー元のマクロごとコピーする方法が分かりません
xlsmで保存することは出来るのですが、どうもマクロの参照先がコピー元になっているらしく、新規ブックからマクロを実行するとコピー元のファイルをわざわざ開く形になってしまっています
マクロごとコピーする方法があればご教示ください
0767デフォルトの名無しさん (ワッチョイ 2791-x7Cl)
垢版 |
2020/05/02(土) 11:53:28.87ID:jcfx6zQ80
>>762
初心者がPowerQuery使うの?
その前にやることがあると思うんだが。

まず、テキストファイルを扱えるようになりなよ。
自在にテキストファイルを扱えるようになれば、どんな形式のCSVでも関係無い。
セル内改行も、そのCSVのフォーマットが分かってないのが原因。
普通はデ−タに改行が入ってるならレコード間の改行と区別する何かがある筈。
1レコードの項目数が必ず決まっている(1レコードのカンマの数が決まっている)とか、そのテキストデ―タは必ずダブルクォーテーションで挟まれており、データ内の改行はダブルクォーテーションのInとOutの間のどこかにあるとか。

もちろんPowerQueryでも良いんだけど、それでたまたま解決出来そうだから飛び付くのは良くない。
こんなもの基本的な処理の組み合わせで出来るんだから、PowerQueryで有利な何かも無いのに無理矢理使おうとしてるように見える。
0768デフォルトの名無しさん (ワッチョイ 075e-ts7H)
垢版 |
2020/05/02(土) 12:25:11.14ID:E33c3GVR0
>>766
自分ではやったことないけどモジュールをそのままコピーするなら
http://officetanaka.net/excel/vba/vbe/07.htm#sample04
こういう方法じゃないかな

自分でやったことがあるのは
https://oshiete.goo.ne.jp/qa/756026.html
こちらの方法で、コードを一行ずつ書いていくことになります

ほんとにまるごとコピーでいいなら上の方法でしょうけど、thisworkbookとか
activeworkbookとか場合によって挙動が変わるような内容なら下の方法
じゃないかな
0770デフォルトの名無しさん (アウアウカー Sa3b-QanA)
垢版 |
2020/05/02(土) 13:09:24.75ID:me7NM96ka
>>768
>>769
ありがとうございます
お恥ずかしながら、今更ながらアドインと個人用マクロブックの存在を知りました
マクロの数も多いので、毎回記述する方法は重くなりそうですし、インポートも考えたのですが、管理するのが大変そうだと躊躇していました
とりあえず、個人用マクロブックで一括管理してやってみようと思います
0774デフォルトの名無しさん (ワッチョイ a7ad-ur4w)
垢版 |
2020/05/02(土) 15:24:24.68ID:Z+zF8E0a0
>>767
あ、ありがとうございます。
テキストファイルから…。
連休の課題にします!
0776デフォルトの名無しさん (アークセー Sx5b-apiA)
垢版 |
2020/05/02(土) 15:54:13.09ID:WuBkO5o5x
>>762
テーブルとしての構造化参照が不要なら別にテーブルにしなくても「空のクエリ」でリテラル定数を返す接続クエリを作るなり、パラメータを登録するなりすれば良い
詳細エディタに
= "テーブル名"
って一行書けば"テーブル名"を返す定数クエリが出来上がる

あと、Letの前行に
(path as text, table_name as text, column_name as text)=>
とか追加すれば、path とtable_nameとcolumn_nameという三つのtext型の引数をダイアログ入力でクエリに渡せるようになるので、クエリ式の側をソース=Csv.Document(File.Contents(path))みたいに書けば良い。


どうしてもVBAからPower Queryをいじりたいなら
Workbook.Queries(Index).Formulaでクエリの式が読み書きできるので、Replaceを使うなりして好きにいじったらいいんじゃないの
0777デフォルトの名無しさん (アウアウカー Sa3b-QanA)
垢版 |
2020/05/02(土) 16:19:14.33ID:be7YjfFea
>>772
なるほど、それはちょっと嫌かも
この際だからアドインも試してみることにします
0778デフォルトの名無しさん (アウアウカー Sa3b-QanA)
垢版 |
2020/05/02(土) 17:01:28.47ID:be7YjfFea
何度もすみません
アドインを通常のマクロのように、図形などで作ったボタンに割り当てることはできないのでしょうか?
0781デフォルトの名無しさん (スッップ Sdff-x7Cl)
垢版 |
2020/05/02(土) 21:28:27.20ID:fjHWXn6td
>>778
アドインの場合、メインは別のブックになるわけだからアドインのシートとかは表示されないという基本は分かってる?

それが分かっていれば図形等で作ったボタンを配置する場所もないと分かる筈。

普通はメニュー(リボン)に作る。
0782デフォルトの名無しさん (ワッチョイ a78f-h83k)
垢版 |
2020/05/02(土) 22:09:54.71ID:7uDOF2SH0
>>764
>>765

数か月前の事なので返ってくるエラーは忘れたけど
どこかの部分で止まるのではなく、開始時に起きるエラーだったと思う
そのファイルを複数のPCで試したけど全てで同じ現象が起こる

で、subプロシージャのコードを一部変更して実行すると動く

コードの変更は何でも良くて
改行、何も書いていない行にスペース追加、コメント追加、コードを消して同じコードを書く
とにかく変化があれば再起動も何も必要なく正常に動く
変更後上書き保存してからは同じエラーは起こっていない

今は問題なく動いてるから困っては無いんだけど
あれは何だったのかなと思った
0784デフォルトの名無しさん (ワッチョイ 7fda-ts7H)
垢版 |
2020/05/02(土) 22:37:34.51ID:zUyEitTf0
>>760
俺もさんざん悩まされたが、ByVal/ByRef問わず、関数にオブジェクト渡すのやめたら改善したわ。
何でもかんでもパブリックにすんなアホって言われてたから、パブリックという発想が中々でなかったが。

>>764
俺の場合は何の音沙汰もなく強制終了だな。
エラーが出ないし、PCによっては動くし、改行いれるだけで変わることもあるから、
どこがおかしいのか全然わからんかった。
互換表示とか保護モードの有無も関係ないし。
0785デフォルトの名無しさん (ワッチョイ 7fda-ts7H)
垢版 |
2020/05/02(土) 22:45:55.01ID:zUyEitTf0
多分、

Readystateコンプしてるのにエラーでるな〜
↓こうしちゃえ

On Error Resume Next
Do
 IEにカキコ
 Sleep 1000
Loop While なんとか
On Error Goto 0

長くて面倒くせえなぁ〜
関数化しちゃえ

で、オブジェクトを関数に渡して嵌る罠なんだと思う。
0786デフォルトの名無しさん (アメ MM6b-p7s+)
垢版 |
2020/05/02(土) 23:09:24.77ID:FzDABaHmM
>>782
それ、IEと関係なく、Excelの更新が原因でvba関係にエラー起きてるやつでは?
ファイル開くときに「エラーがあります、可能な範囲で修正しますか」みたいなアラートがでて、はいを押すとコードが全削除される。
0787デフォルトの名無しさん (ワッチョイ dfb5-EVni)
垢版 |
2020/05/02(土) 23:36:58.40ID:qrZctUhv0
教えてくださいまし。。
画像のように日によって参加人数も競技した数も違うものを
受付した人と競技の範囲の値のみ
隣のシートに貼り付けるようにしたいですが
エクセル関数のエラーや未計算が都合上どうしても残ってしまい残ってうまく行かず…
https://i.imgur.com/Sd2Afas.jpg
https://i.imgur.com/MfnIQSU.jpg
https://i.imgur.com/lEQTEIe.jpg

受付した人の数字が空白になるまでは空白になるまで、競技も空白になるまで
その範囲のみをコピーというか可能でしょうか
0788デフォルトの名無しさん (ワッチョイ dfb5-EVni)
垢版 |
2020/05/02(土) 23:39:12.79ID:qrZctUhv0
Sub 貼り付け()
Dim gy As Long
Dim re As Long Dim
Dim Tensu As String
Dim Kekka As String

Sheets(Tensu) = "点数"
Sheets() = "結果シート"

Sheets(Tensu).Select
With Range("C5")
gy = .End(xlDown).Row
If .Offset(1).Value = "" Then
gy = .Row re = .End(xlToRight).Column
If .Offset(, 1).Value = "" Then
re = .Column With .Resize(gy - .Row + 1, re - .Column + 1)
Sheets(Tensu).Select Range("H8").Resize(.Rows.Count, .Columns.Count).Value = .Value
End With End With
End Sub

これで作ってみたのですがやはり関数エラーが
邪魔してエラーになります
行も列も両方を空白までループして貼り付け
むずぃす
0793デフォルトの名無しさん (ワッチョイ c7ce-ts7H)
垢版 |
2020/05/03(日) 00:01:44.09ID:fR4zqWYb0
>>788
全体的にめちゃくちゃで、それじゃ関数エラー以前にまったく動かないはずなんだけど、本当にそれで途中までは動いてるの?
スマホでポチポチ書き写すんじゃなくて、できるだけPCでそのままコピペしてくれない?
0794デフォルトの名無しさん (ワッチョイ dfb5-EVni)
垢版 |
2020/05/03(日) 00:26:05.49ID:EGR1WLcw0
>>793
Sub test()
Dim gy As Long, re As Long
With Range("C5") gy = .End(xlDown).Row
If .Offset(1).Value = "" Then gy = .Row
cl = .End(xlToRight).Column
If .Offset(, 1).Value = "" Then re = .Column With .Resize(gy - .Row + 1, re - .Column + 1) Range("AA5").Resize(.Rows.Count, .Columns.Count).Value = .Value
End With
End With
End Sub

元々作これで動いたのを確認しやしたが
無力過ぎて悔しいっす
そもそもエクセル関数の方のエラーが出ないようにif関数で空白の場合はセルも空白にしようかと思ったけどそもそも他部署の管轄
俺の圧倒的力の無さですわこりゃ
0795デフォルトの名無しさん (ワッチョイ dfb5-EVni)
垢版 |
2020/05/03(日) 00:31:44.93ID:EGR1WLcw0
というか完全に圧倒的勘違いでした

動いたと思っていざ使おうとしたら
他部署からのデータが画像のように
参加してない選手のところにセルにエラーがついてくる仕様なのに気付いて動かなかった
これが正解です
頭おかしくなってますわ
0796デフォルトの名無しさん (ワッチョイ c7ce-ts7H)
垢版 |
2020/05/03(日) 00:38:44.40ID:fR4zqWYb0
>>794
ワークシートの数式を消しちゃっていいんなら、エラーの出てるセルを全部空白にするのは簡単
Sub エラー全部消す()
 Dim c As Range
 For Each c In ActiveSheet.UsedRange
  If IsError(c.Value) Then c = ""
 Next
End Sub
0799デフォルトの名無しさん (ワッチョイ dfb5-EVni)
垢版 |
2020/05/03(日) 01:37:52.66ID:EGR1WLcw0
>>796
教えてくれてありがとうございやす
ただシート内の別のところにも数式待ちのエラーのセルがあって俺の管轄じゃないので全てのエラーを消すわけにはいかず…範囲指定するスキルもなく…

>>797
>>798
完全にその赤枠のところの「値」のみをコピーしたいです

それが毎回、選手の数と競技の数が違う
という感じです

選手Cが空白なのに選手Dは数値が入る
ということはないので
受付の列が空白になるまでコピーを
ループ?とか考えながら挫折してます
0800デフォルトの名無しさん (ワッチョイ dfb5-EVni)
垢版 |
2020/05/03(日) 01:46:13.78ID:EGR1WLcw0
受付の行が空白のセルになるまでループしつつ
競技の列が空白になるまでループ??
んん?違うか

GWになのにExcel開いてずっとマクロで悩むとは…とんだステイホームですわ
0802デフォルトの名無しさん (ワッチョイ c7ce-ts7H)
垢版 |
2020/05/03(日) 02:10:58.89ID:fR4zqWYb0
>>799
はい、できたよ

Sub 数字だけコピー()
  Dim rr As Long
  Dim cc As Long
  Dim dat As Variant
  rr = Cells(Rows.Count, 3).End(xlUp).Row - 4 '高さを求める
  cc = Cells(5, Columns.Count).End(xlToLeft).Column - 2 '幅を求める
  dat = Range("C5").Resize(rr, cc).Value 'データを変数に入れる
  Range("AA5").Resize(rr, cc).Value = dat 'コピーする
End Sub
0803デフォルトの名無しさん (ワッチョイ c7ce-ts7H)
垢版 |
2020/05/03(日) 02:15:53.76ID:fR4zqWYb0
ごめん
ちょっとだけ修正させて

Sub 数字だけコピー()
  Dim rr As Long
  Dim cc As Long
  Dim dat As Variant
  rr = Range("C4").End(xlDown).Row - 4 '高さを求める
  cc = Range("B5").End(xlToRight).Column - 2 '幅を求める
  dat = Range("C5").Resize(rr, cc).Value 'データを変数に入れる
  Range("AA5").Resize(rr, cc).Value = dat 'コピーする
End Sub
0804デフォルトの名無しさん (ワッチョイ df01-lZTE)
垢版 |
2020/05/03(日) 03:59:51.25ID:PK0PPm520
この程度のものを人に聞かなきゃできないようじゃ先が思いやられる
これで職場の50代批判できるのかと・・・・
しかも最初のこれ>>787
もう少し日本語の説明能力上げたほうがいいんじゃないか
君何度もここでいろんな質問してるよね?質問の仕方からして酷すぎる

説明の例1:
この画像で言えばC5からE13の範囲を別シートにコピーしたいです
https://i.imgur.com/Sd2Afas.jpg
コピーしたい範囲は変化します。例えばこの場合はC5からI9までをコピーしたいです
http://i.imgur.com/MfnIQSU.jpg

説明の例2:
こういう画像をペイントで作る
https://i.imgur.com/u9Vhnj1.jpg




はぁ・・・おれ深夜に何やってんだか・・・
0805デフォルトの名無しさん (ワッチョイ a7ad-ur4w)
垢版 |
2020/05/03(日) 09:15:39.22ID:iPr/hZRI0
>>776
ご助言ありがとうございます!
教えていたことの意味を調べながら勉強します。

ちなみにうちの職場では55歳のオバハンが独学で書いてるVBA
が一番「きれい」だそうで。教科書通りで、整理整頓されてる感じで
非エンジニアには優しいんです。(簡単なものしか作らない人ですけど。)
でも「リーダブルコード」とか「VBA実践のためのなんちゃら」とか
読んで勉強してるの見かけたので、心がけは見習いたいです。
0807デフォルトの名無しさん (ワッチョイ e7ad-GPK9)
垢版 |
2020/05/03(日) 09:20:36.28ID:2hdRjZho0
>>805
>独学で書いてるVBAが一番「きれい」
>教科書通りで、整理整頓
それはあるかもな

プログラマだとなまじ他言語の知識があるために
トリッキーなことやりだす奴が一定数いるからな
効率が良い面もあるだろうが他人が理解しにくい
0819デフォルトの名無しさん (ワッチョイ 878f-ts7H)
垢版 |
2020/05/03(日) 22:08:11.47ID:dDcWYHiB0
>>807
perl で組んだテトリスだったかな。あれ見たときはぶったまげた。

元々ワンライナーをやりやすい言語とは言え、あれはもう
何が何やらわからない世界だった。どんだけ頭いいんだよと。

でも、「こんなの理解できないの?ふ〜ん(にやにや)」みたいな
のは生産性的には駄目だよね。


美しさをトリッキーさに見出すか可読性に見出すかは人それぞれ
だけど、自分よりスキルが下の他人に保守させるとか、未来の自
分が保守しないといけないかもとかなら冗長性持ってるほうがいい
かも。

いちばん大事なのは懇切丁寧なコメントだろうけど。
0820デフォルトの名無しさん (ワッチョイ 878f-ts7H)
垢版 |
2020/05/03(日) 22:21:26.63ID:dDcWYHiB0
>>805
> ちなみにうちの職場では55歳のオバハンが独学で書いてるVBA
> が一番「きれい」だそうで。教科書通りで、整理整頓されてる感じで
> 非エンジニアには優しいんです。(簡単なものしか作らない人ですけど。)
> でも「リーダブルコード」とか「VBA実践のためのなんちゃら」とか
> 読んで勉強してるの見かけたので、心がけは見習いたいです。

あえて長文引用させてもらったけど、あんた程度の人間がなんで
その55歳の女性を貶めてるの?
0822デフォルトの名無しさん (JP 0H8f-Ng5p)
垢版 |
2020/05/03(日) 22:57:44.37ID:8sSb2t20H
まともなプログラマなら周りのレベルに合わせて読みやすいコードを書けるよ
VBAの仕事なんかやってる時点でその程度のレベルなんだから仕方ない
0823デフォルトの名無しさん (ワッチョイ 2791-x7Cl)
垢版 |
2020/05/03(日) 22:58:39.80ID:hVYH2JxT0
>>819
コメントもたくさんあれば良いというもんじゃない。

Dim blFlg AsBoolean 'フラグ

こんなコメントはアホ。
フラグかどうかは名前と型で分かってる。
残すべきはどういうフラグかだ。
0828デフォルトの名無しさん (ワッチョイ 878f-ts7H)
垢版 |
2020/05/03(日) 23:13:29.74ID:dDcWYHiB0
ただ、伝わりやすい変数名ってのが読む方の英語の素養に
大きく左右されちゃう不幸が。

TOEICで600くらい(英語の得意な高校生あたり)を想定するのが
いいかなあ。
0831デフォルトの名無しさん (スップ Sd7f-D935)
垢版 |
2020/05/04(月) 02:26:38.20ID:5comiU6qd
自分だけ楽するために片手間に作ったやつがいつのまにか広まって、ドキュメントなんかもちろん作ってなくて、最初に作った人は異動しちゃって、みたいなことVBAではよくある
0832デフォルトの名無しさん (ワッチョイ e794-C/EQ)
垢版 |
2020/05/04(月) 04:29:56.94ID:eaaQNpcs0
VBAは事務員のオバさんが作る程度のオモチャ
仕様書とか本気で言ってんの?
キモいわ
0840デフォルトの名無しさん (ワッチョイ df01-lZTE)
垢版 |
2020/05/04(月) 10:39:56.70ID:EYE1xMNJ0
うちの職場じゃボタン押すことぐらいしか出来ないような連中ばかりだから
仕様書どころかマニュアル作っても1割ぐらいしか理解してもらえないだろうな
目の前で説明しても少し込み入った設定になると覚える気一切ないしな
俺がいなくなったら終わりと思ってる
コメントすら残してない
0841デフォルトの名無しさん (ワッチョイ a7ad-ur4w)
垢版 |
2020/05/04(月) 11:03:15.13ID:mKy38ERH0
こんにちは。
このスレを見て勉強しようと思って色々読んでは、たいてい
なんの話をしているのかもわからない、プログラマではない層の者です。
上の方で、
>>809
If a = True Then 
a = False
ElseIf a = False Then
a = True
End If
みたいな書き方っていやだね。
>>810
a = Not(a)  でいいんじゃ?

という会話があったのですが、>>809 って
どんな時に使うのかさっぱり???でした。
どなたか暇つぶしにでもご教示いただけませんでしょうか。
0848デフォルトの名無しさん (ワッチョイ a78f-h83k)
垢版 |
2020/05/04(月) 13:17:26.32ID:n6lRLUl70
If a = True Then

誰にでもわかる書き方でとても良いと思う

今VBAを勉強する人は本職プログラマではなく
別に仕事があって、その効率化の為に学んでる人が主でしょう

そしてそれを非プログラマ同士で共有するのなら
どの本にでも書いてある書き方の方が望ましい
匿名の名人様の言葉に右往左往する必要はないよ
0851デフォルトの名無しさん (ワッチョイ 2791-x7Cl)
垢版 |
2020/05/04(月) 14:14:20.30ID:r232eNWS0
>>841
卜グルボタンとかチェックボックスのようなオンオフするようなものを変数で管理しようとした時に、変数がTrueならFalseに設定し、FalseならTrueに設定する処理を書いている。

最初のIf文の方は英文が分かれば簡単に理解出来る。
Notを使う方はTrue/Falseだから変数を変数自身と反対にすることで実現してる。
0852デフォルトの名無しさん (ワッチョイ 7fdd-ts7H)
垢版 |
2020/05/04(月) 14:35:44.64ID:m3H0OQVZ0
検索Dialogの検索場所(WithIn)をVBAから切り替えるアイデアをお持ちの方いたら教えていただけないでしょうか。
全シートから検索するのが目的ではなく、ブック全体検索後に何気に範囲指定置換を実施して引き起こされる惨状を回避したく。
(または別視点による工夫でもOKです)
詳しい方、よろしくお願いします。
0853デフォルトの名無しさん (ワッチョイ 67ac-fZS3)
垢版 |
2020/05/04(月) 15:43:06.15ID:ESbXk+mE0
>>852
意味不明な点が多すぎる。
>ブック全体検索後に何気に範囲指定置換を実施して
 検索と置換ダイアログでは検索、置換は違うタブだから操作ミスは起きずらいが、
 そこまでしなきゃならないのか

>引き起こされる惨状を回避したく。
 惨状って具体的になにか

そもそも惨状とやらが起きるのは、GUIの話なのかVBAの話なのか
0854デフォルトの名無しさん (スップ Sd7f-C/EQ)
垢版 |
2020/05/04(月) 15:44:13.44ID:gO9XNStOd
今からVBAなんて覚える必要は全くない
0855デフォルトの名無しさん (ワッチョイ a7ad-ur4w)
垢版 |
2020/05/04(月) 18:17:24.80ID:mKy38ERH0
841です。
丁寧な解説、みなさんありがとうございました。
勉強になりました。
0856デフォルトの名無しさん (ワッチョイ 67f9-qVEi)
垢版 |
2020/05/04(月) 19:20:35.81ID:V2+TGFiQ0
>>855
アンカーも書けず全角で数字を書くよな馬鹿は死ね
0857デフォルトの名無しさん (ワッチョイ 7fdd-ts7H)
垢版 |
2020/05/04(月) 19:40:04.11ID:m3H0OQVZ0
>>853
説明が不足していました。

検索と置換のタブはパラメータ設定の記憶が共通となっております。
ブック全体検索を行った後に範囲を選択して範囲内置換を実施しようとCtrl+Hを押します。
すると前回検索時の "検索場所=ブック"が活きている状態になっております。
気づかずに実施すると全シートの指定文字列が置換されてデータが破壊されてしまいます。
コロン ":" でも削除置換しようものなら全ての時刻書式が破壊されます。
お試しください。

これを防ぐには、ブック内検索を実施した際は引き続きシート内検索を実施して設定を戻しておく必要があります。
普段ブック内検索ってあまり使わないのでこんな時に限って忘れてしまいます。
VBAはどうなっているかというと、.Find .Replace共に、WithInパラメータが存在しないため引数指定できず、直前のUI操作依存となるわけです。
自動化された置換処理があったりすると、事故が起こるわけです。

本件、GGってよく捜してみたら同様の悩みに対するQAありました。

 Range("A1").Find("*")

この1行を実施するだけで検索場所をシートに戻せるようです。
逆に検索場所をブックにする方法を探しているところです。

ご存じの方おられましたら教えてください。
0858デフォルトの名無しさん (ワッチョイ 6741-eET6)
垢版 |
2020/05/04(月) 20:21:19.69ID:2XIJsT+F0
.OpenTextで開いたテキストファイルを操作したいのですがやり方がわからなくて困っています。
拡張子CSVなら通常のエクセルワークシートと同様に扱えますが、テキストファイルは無理なのでしょうか?
Workbooks.Countは開いたテキストファイルの分増えているようですが…
ご教示お願いいたします。
0860デフォルトの名無しさん (ワッチョイ 87e6-aR2J)
垢版 |
2020/05/04(月) 20:40:40.91ID:c199Arvf0
1セルに1文字づつならExcelチックに楽しめそうだな

知らんけど
0861デフォルトの名無しさん (ワッチョイ a78e-MvRk)
垢版 |
2020/05/04(月) 20:56:39.11ID:oqIKeiQj0
次から次へと馬鹿が来る
0862853 (ワッチョイ 67ac-ts7H)
垢版 |
2020/05/04(月) 21:05:25.33ID:ESbXk+mE0
>>857
まず、問題としてる事象は提示している方法で解決するんだよね
そのブック開いたときとか操作したときに実行すればいい

>「ブック全体検索を行った後」に「範囲を選択」して「範囲内置換を実施」(ブック全体と指定しているオプションを開いたまま)
 → その悪意に満ちた行為のみを想定するの?
   検索ダイアログのオプション設定は起動中のExcelアプリ(プロセス)に記憶されるから、
   Excelアプリを開いたまま同じPCで同様の操作をしないと再現しないはず

>気づかずに実施すると全シートの指定文字列が置換されてデータが破壊されてしまいます。
 → さっきの操作をすると検索オプションは開いてるはずだけど、
   それでも気付かずファイル保存するっていう悪意ry
   GUI操作->GUI操作で出る問題なら、運用で禁止するか保護するか、影響に基づいて運用システム自体を見直す

>逆に検索場所をブックにする方法を探しているところです。
 → 問題としてる事象の解決は自分で提示しているようだけど、
   逆に引き起こしたいってことは、単にやりたいから?
   VBAで置換するなら別に全シートをReplace擦ればいいだけだし
   GUIでブックにしたいならそう操作すればいいけど、何が必要なの

検索と置換ダイアログの操作はCommandBars.dialogsとかExecuteMsoとかで表示は出来る
ウィンドウ操作にしても他のダイアログ操作と似たようなもんだろう(APIが多分必要)

GUIとVBAをごっちゃに対応するから要らない悩みを抱える
運用やコストを考えない妄想の機能なら、それこそ趣味でアドインでも作ればいい
0863デフォルトの名無しさん (ワッチョイ 6741-eET6)
垢版 |
2020/05/04(月) 21:24:09.39ID:2XIJsT+F0
説明足らずで申し訳ありません。
カンマ区切りのテキストファイルに対してOpenTextを使います。これでカンマごとにセルに値が分けらたエクセルブックが開きます。
このブックのシートを通常のエクセルシートと同様に、例えばRange("A1").Activateとしたいのですが、ブックをどうやって指定すればいいのでしょうか?

以下の方法を試しましたがうまくいきません。
元々開いているブックが一つのとき、テキストファイルはWorkbooks.CountWorkbook=2として開かれることを確認。このときWorkbooks(2)をVariant型の変数に代入しようとしました。

Set myBook = Workbooks(2)

ウォッチ式でmyBookの値を確認すると
型 Variant/Object
値 <変数なし>
となり値が取得できません。

テキストファイルの拡張子をCSVに変更すると問題なく値が取得できます。

すみませんがよろしくお願いいたします。
0864デフォルトの名無しさん (ワッチョイ 7fdd-ts7H)
垢版 |
2020/05/04(月) 21:39:32.81ID:m3H0OQVZ0
>>862
ご回答ありがとうございます。

>オプションを開いたまま
これの意味がわからないですが、ダイアログを開いたままという意味なら、閉じても記憶は維持します。
全体検索実施と範囲選択実施は一連の動作じゃないです。
例えば複数のファイルを開いて作業していて、全体検索を実施したファイルは既に1時間前に閉じていたとしても設定は維持されます。
これを悪意と言われましても、、
まあ、この点は前述のコードをシートイベント等に挟むことで防げそうです。
(設置Bookに限られるかな?まあ、良い方法を考えてみます)

>それでも気づかずに
キーボード主体でマウスはほぼ使わない派なので、範囲選択→ダイアログ開く→検索語、置換語入力→Enterの動作は
一連の操作で、ガッ、ガガガッで感じでやっちゃうのでダイアログのパラメータいちいち確認しないんですよね。
ちょっと落ち着けよって話なんでしょうけど。

>問題としている事象の解決は自分で提示しているようだけど、
最初に掲げた命題が "VBAで検索場所(WithIn)を切り替えたい" だったので逆の操作もできれば知りたいという程度です。
破壊リスクは回避できそうですが、例えば範囲が”シート"の状態からVBAで"ブック"に変更して全置換も可能なのかな、という疑問です。
結論としては通常の方法では出来なそうですね。
Worksheets.Select: Cells.Select を実行すれば、シートをForで回さなくても
 Selection.Replace できることもわかりましたのでこれで解決としたいと思います。

>GUIとVBAをごっちゃに対応するから要らない悩みを抱える
GUIの設定がVBA操作にも影響を与えてしまうから制御できないかなと思った次第です。

お付き合いいただきありがとうございます。
0866デフォルトの名無しさん (ワッチョイ a764-7mTq)
垢版 |
2020/05/04(月) 22:13:52.11ID:HiZbEqQh0
特に目的があるわけではないけど、興味があってVBAを勉強しようと思ってます。
皆さんどんな勉強法しましたか?おすすめの本とか有りましたら知りたいです
0867853 (ワッチョイ 67ac-ts7H)
垢版 |
2020/05/04(月) 22:16:36.67ID:ESbXk+mE0
>>864
まあ終わってるからいいけど・・

>>オプションを開いたまま
>これの意味がわからないですが、ダイアログを開いたままという意味なら、閉じても記憶は維持します。
 →これは、「検索と置換」ダイアログの
  「検索場所」ドロップダウンはGUIだと「オプション>>」ボタンで開かれる拡張エリアにのみ表示されて、
  「ブック全体を選択した」=「オプションを展開表示している」から、GUIなら気付かないわけがない。
  ということ。
  ダイアログ内の設定値同様、オプション展開状況もExcelプロセスで共有してるから、
  他のファイルで展開してるなら違うブックでも展開されたままダイアログ表示される。

>GUIの設定がVBA操作にも影響を与えてしまうから制御できないかなと思った次第です。
  VBAもGUIで行った設定の影響を受けないような、Rangeを指定する記述を普通は心掛けるべきだな
0868デフォルトの名無しさん (ワッチョイ e709-ur4w)
垢版 |
2020/05/04(月) 23:21:11.46ID:igVQrW+K0
今までそーいうものだと思い込ませて放置していたことなのですが、
引数を使うのにカッコつけなきゃいけないメソッドと、使わなくてもいい
メソッドって、なにが違うんでしょうか?なにか理由があるのでしょうか。

Dim a As Range: Set a = Cells.Find(What:="test")
ThisWorkbook.ActiveSheet.PrintOut copies:=1

それに付け加えて、findした結果をcolllectionに格納する際、
カッコをつけるとdouble型、つけないとrange型となりました。

検索結果を格納するcollection.Add 検索range
検索結果を格納するcollection.Add (検索range)

ご教授何卒宜しくお願いいたします。
0869デフォルトの名無しさん (ワッチョイ 7fdd-ts7H)
垢版 |
2020/05/04(月) 23:58:21.23ID:m3H0OQVZ0
>>867
オプションが開かれてるという意味でしたか。
なるほどですね。
呼吸レベルでキーコンビネーションで通り過ぎちゃうので、、しっかり見るべきだと。

>VBAもGUIで行った設定の影響を受けないような
ごもっともです。

普段は .Find系は滅多に使わないのですが、あるとき大被害にあって、、、
どちらかというとGUI操作のほうが悩ましかったので、、、

API制御の方法にも辿り着けて、各Controlの制御もわかりました。
一瞬表示されてしまうのが難点ですが。良い情報をいただきました。

ご助言感謝します。
0874デフォルトの名無しさん (ワッチョイ e709-ur4w)
垢版 |
2020/05/05(火) 21:19:05.44ID:lsW1yIjx0
vbaのエディタの話なのですが、皆様はコードの複数行を選択したいとき
ショートカットかなにか使っているのでしょうか?
たとえば、一部のコードが不要になって削除や切り取りしたいときに、
ちゃんと行頭から行末までしっかり選択しないとtabやスペースが残ってしまい、
その後コードがズレたり色々と不都合が生じています。
現在は、Homeで行頭、Shift+下矢印で選択しています。
マウスで左端をドラッグすれば選択できるのは知っていますが、これの
キーボードショートカットとかないんですかね・・・
0877デフォルトの名無しさん (ワッチョイ e709-ur4w)
垢版 |
2020/05/05(火) 22:03:15.71ID:lsW1yIjx0
>>876
web拝見しましたが、「複数選択→tabで行範囲が作成される」という部分
でしょうか?確かに、削除ならこれでいけそうです。
(コピーや切り取りのときにはtab→shift+tabで元通りにしなきゃならないかもですが)
私はずっとvbaを使わずエクセル本体の操作に慣れていたのですが、よく使っているのが
適当な複数のセル範囲を作成⇒それらをshift+spaceで行範囲化
という動作だったので、ここにいる方たちはvbaではどんな操作を
しているのか気になって質問いたしました。ありがとうございました。
0879デフォルトの名無しさん (ブーイモ MM2b-trzR)
垢版 |
2020/05/05(火) 22:11:42.93ID:NpEa/agLM
このハゲー
0881デフォルトの名無しさん (ワッチョイ 738e-jYUs)
垢版 |
2020/05/06(水) 00:51:48.50ID:Kd1uYxyM0
>>880
馬鹿は死ね
0888デフォルトの名無しさん (ブーイモ MMd6-sgQa)
垢版 |
2020/05/06(水) 12:16:06.30ID:j2svN8neM
クラスに対してモジュールという概念がよくわかりません。Cで言うところ外部ヘッダファイルとソースみたいなものでしょうか。クラスを使ってたら基本的に出番がない?
0893デフォルトの名無しさん (ワッチョイ 662f-jW3u)
垢版 |
2020/05/06(水) 16:43:25.70ID:OIN1lY2H0
>>863
それウォッチがちゃんと出ないだけで、ブックそのものはとれてるだろ
試しにやってみたが、myBookのウォッチで展開すると変数なしだが
myBook.Sheets(1).Range("A1").Activate でちゃんと動作するぞ
0898デフォルトの名無しさん (アウアウウー Sa1f-lvFW)
垢版 |
2020/05/06(水) 19:37:46.56ID:aLD+Grz6a
それはプログラミングをするという前提を置いている時点で矛盾している
手段はなんでもいいから目的達成できりゃいい、だと、だいたいのことは出来合いのSaaSを契約して使うのが最良
0901デフォルトの名無しさん (ワッチョイ 5b09-jgrQ)
垢版 |
2020/05/06(水) 20:48:48.08ID:p05hHIhJ0
>>885
余計な操作が無くなることでかかる時間とストレスが減って、その分
新しい知識や技術を取り入れることに割ける、という意味があると思って
質問してみました。
>>878のちがうだろの結局何が違うのかは分かりませんでしたが…
まあ、ググレカスは昔からある2chの風習だと思いますが。
0902デフォルトの名無しさん (ワッチョイ 8f63-07dd)
垢版 |
2020/05/06(水) 22:29:01.29ID:k50qIlTz0
>>901
残念ながら設定でこれだけ躓いて立ち止まるような人は言ってるような時間の有効活用できるとは思えんな
ツールはツールと割り切ったり慣れたりする事ができないなら、今後時間の有効活用できるようにもなれないよ
0903デフォルトの名無しさん (ワッチョイ 738e-jYUs)
垢版 |
2020/05/06(水) 22:34:53.59ID:Kd1uYxyM0
>>901
馬鹿は死ね
0907デフォルトの名無しさん (ワッチョイ 6391-ABif)
垢版 |
2020/05/07(木) 13:12:49.35ID:MibsCGor0
>>896
そいつは違うな。
拘るのは必要だ。

最適なのに拘るの。
だから動いたで終わりにしないで他にもっと良い方法はないかを常に考える。

自分が知らなかった技術を手に入れた時に、これを使えば5年前のあの件はもっと上手く出来たかもと考える。
0915デフォルトの名無しさん (ラクッペペ MMe6-r6hg)
垢版 |
2020/05/07(木) 17:29:14.38ID:OBEeDnS1M
無知の知
0916デフォルトの名無しさん (ワッチョイ 33ad-D+XR)
垢版 |
2020/05/07(木) 17:50:13.55ID:oG7+JCgx0
Application.CentimetersToPoints(1)
で列幅1cmにしたいんですが、
何度やっても5.64cmになります。

Rows(n).RowHeight = Application.CentimetersToPoints(1)
はちゃんと行幅1cmになりました。
Columns(n).ColumnWidth = Application.CentimetersToPoints(1)
だと何故か列幅5.64cmになります。
この事についてどう検索しても誰も言及してないことも含めて謎が尽きません。
煮詰まり過ぎて焦げ付いてきたのでどなたかアドバイスお願いします。
0917デフォルトの名無しさん (ワッチョイ 33ad-D+XR)
垢版 |
2020/05/07(木) 17:58:41.98ID:oG7+JCgx0
あっまさか列と幅のポイントは同じポイントでも数値としては別物って聞いた気もする
そして行幅のポイントの方がVBAのポイントと合致しているという訳か
だとすると列幅のポイントに変換するのはどうしたらいいのか…
0922デフォルトの名無しさん (スプッッ Sd2a-ABif)
垢版 |
2020/05/07(木) 19:06:33.04ID:IeUYmiVSd
>>921
あれ、分からんかった?
瞬時に5通り思いついたとして、5年後に知らない技術を獲得した時に、あの時これ使えばもっと良くなったなあと思うとか。
あるいは昔、どうしても解決出来なかった問題が解決出来たとか。

俺の場合はデフォルトのプリンター設定のポートを変更するプログラムが出来なくてね。
PRINTER_INFO_5構造体を使ってプリンターのプロパティ設定変更するのは出来てたけどポートはさらに先のポインタでその時は出来なかった。

もっとも、これ10年以上前の話だし、それで修正するとかいう話でもないけどな。
0926デフォルトの名無しさん (ワッチョイ 6bac-V20a)
垢版 |
2020/05/07(木) 21:20:02.04ID:k5uIH00p0
>>924
別に古臭いVBAおじさんに絡みたいとかないけどなw
その程度でどや顔して、こんなところで長文まで書いて哀れだなあってねw

・瞬時に5個思い付く(ドヤア)
・10年以上前の話(ドヤア)
・どうしても解決出来ない問題が解決できた(ドヤア)

いい年して恥ずかしいww
0928デフォルトの名無しさん (ワッチョイ 6ab5-OuYa)
垢版 |
2020/05/07(木) 21:29:03.52ID:vCXp7vkf0
4月、5月、6月というシートを請求書という新しいブック名のシートに追加していきたい場合

請求書というブックがなかったら
請求書というブックを作成して○月のシートをコピー
既に請求書というブックがあったら
そのブック内に○月のシートをコピー

という考え方でいいですか?
というか可能ですか?
0938デフォルトの名無しさん (ワッチョイ 7f7f-sgQa)
垢版 |
2020/05/07(木) 23:08:01.99ID:ATN3rOjQ0
array関数で要素を代入する際に、プロシージャ引数のヒントの様にカンマで区切ると何を入力すべきか表示させることは出来ないでしょうか。要素が多いので解りづらくて
戻り値ありの関数作るべきなのでしょうか
0943デフォルトの名無しさん (ワッチョイ 6bac-V20a)
垢版 |
2020/05/08(金) 09:39:57.65ID:NrG+fdAu0
>>941

>出来る奴は瞬時に何通りかは思いつく。

>もっとも、これ10年以上前の話だし、それで修正するとかいう話でもないけどな。

>瞬時に5通り思いついたとして、5年後に知らない技術を獲得した時に、あの時これ使えばもっと良くなったなあと思うとか。

ん?早く質問者に5通りコードで回答してあげなよ、プロVBAおじさんww
0949デフォルトの名無しさん (アウアウウー Sa1f-Y/5H)
垢版 |
2020/05/08(金) 18:51:21.09ID:F9AE4+4ta
バッチを非同期で実行したいんだけどShellでやってもWSHShellでやっても
バッチの終了まで待たされるんだけど何故?

やってることはIEを操作してファイルをDLするところまでVBAでやって
それ以降の処理をバッチでやりたいんだけど…
0950デフォルトの名無しさん (ワッチョイ cfe6-r6hg)
垢版 |
2020/05/08(金) 19:02:53.06ID:XNwDJZFz0
非同期オプション付けても出来ないのですか?
不思議ですね
0953デフォルトの名無しさん (アウアウウー Sa1f-2+Ho)
垢版 |
2020/05/08(金) 21:13:02.00ID:oLBub1X/a
vbaでハイパーリンク設定済み場所から
フルパスを取得したいです。

https://www.google.co.jp/amp/s/gamp.ameblo.jp/ksej/entry-11288945247.html

このサイトの方法でネットワーク上のアドレス取得して
あるセルにフルパスを貼りたいんだけど
カレントディレクトリが¥¥A¥B¥C
とあったら、¥¥A¥Bまでしか貼り付けに反映されないのってなぜかわかりますか?

msgboxでカレントディレクトリだけ表示させたら
Cまで表示されますが貼り付けたらBまでしか表示されない感じです。

あとカレントフォルダの設定はこのサイトの方法です。
https://vbabeginner.net/vbaでネットワークドライブにカレントを変更する/
0957デフォルトの名無しさん (ワッチョイ 738e-jYUs)
垢版 |
2020/05/08(金) 22:58:17.96ID:AMoglHga0
>>953
ただのコピペしかできない馬鹿だからだろ
0958デフォルトの名無しさん (アウアウウー Sa1f-2+Ho)
垢版 |
2020/05/08(金) 23:39:12.99ID:oLBub1X/a
>>957
他のサイトも色々見て調べたり試行錯誤したのですが
Cが表示されなくて。

何か縛り的なのがあるかわかりますか。
貼り付け時の表示文字数に制限があるとか。

最悪わからなければ、
¥¥からCまでを取得したものをセルに貼り付けて
C以降を貼り付けたものを&で繋げて使おうか迷ってます。
0960デフォルトの名無しさん (アウアウウー Sa1f-2+Ho)
垢版 |
2020/05/08(金) 23:56:44.70ID:oLBub1X/a
1)と2)と4)についてはBまでの表示

3)についてはフルパスでは試してないので、試して見ます。

ちなみに3)はカレントディレクトリのみで行うと、Cまで表示されて、次の行に2)を試すとBまでになってしまいます。
0961デフォルトの名無しさん (ワッチョイ 6bac-V20a)
垢版 |
2020/05/09(土) 00:37:26.19ID:SO2yq4ky0
>>954
質問どんどん来てるよww
10年やってきたんだから早く5通り以上答えてあげなよww
そしてリファクタリング出来たらその都度書き込んでなw

>出来る奴は瞬時に何通りかは思いつく。

>もっとも、これ10年以上前の話だし、それで修正するとかいう話でもないけどな。

>瞬時に5通り思いついたとして、5年後に知らない技術を獲得した時に、あの時これ使えばもっと良くなったなあと思うとか。
0966デフォルトの名無しさん (ワッチョイ 8f59-2+Ho)
垢版 |
2020/05/09(土) 12:02:06.49ID:zV8Vx2bY0
>>963
わかりにくくてすいません。

abcは仮に書いた感じで、実際はネットワーク上のフォルダ名になります。
0969デフォルトの名無しさん (ワッチョイ 8f59-2+Ho)
垢版 |
2020/05/09(土) 12:17:50.79ID:zV8Vx2bY0
>>967

ネットワーク上にあるエクセルファイルで、
相対参照で貼り付けされたハイパーリンクがあるんですが
それを絶対参照で取得したいです。

カレントディレクトリを¥¥a¥¥b¥¥cで設定し
GetAbsolutePathNameで取得しあるセルに貼り付けると
なぜか¥¥a¥b¥取得したパス.xlsxになります。
カレントディレクトリをmsgboxで表示すると¥¥a¥b¥cとなります。

今端末が手元にないので、スクショ取れるようになり次第
対応します。

助かります。
0970デフォルトの名無しさん (ワッチョイ 8f59-2+Ho)
垢版 |
2020/05/09(土) 12:23:23.31ID:zV8Vx2bY0
>>965
アドレスを変更しています。
0973デフォルトの名無しさん (ワッチョイ 6391-ABif)
垢版 |
2020/05/09(土) 13:04:53.46ID:74X5YOol0
>>962
何となく分かった。
待たされたんじゃなくてフォーカスがバッチファイルにある。

よく、たくさんのウィンドウが開いてる時なんかにメッセージを表示しようとタスクバー上で点滅してるのと同じ現象。
バッチファイル実行中にExcelをクリックするとすぐ実行されるよ。

Shellの第2引数にvbNormalNoFocusを指定してみよう。
0974デフォルトの名無しさん (ワッチョイ 6391-ABif)
垢版 |
2020/05/09(土) 13:16:32.84ID:74X5YOol0
>>969
カレントディレクトリとは何かを調べた方が良い。
これはエクセルファイルだとかに関係が無い。
動いている場所だ。
ブックのある場所でも無い。

ハイパーリンクの相対参照、絶対参照の操作でカレントディレクトリが関係することは無い。
0976デフォルトの名無しさん (ワッチョイ 738e-jYUs)
垢版 |
2020/05/09(土) 13:21:14.53ID:WSrPnN3q0
意味もわからずただコピペしかできない馬鹿には無理
0977デフォルトの名無しさん (ワッチョイ 6bac-V20a)
垢版 |
2020/05/09(土) 13:25:01.47ID:SO2yq4ky0
>>968
話はそれからだ、ってコード5つ提示もしないで答えない10年経験者に言われてもなあww
ほらコード5つ提示して答えてあげなよw

>出来る奴は瞬時に何通りかは思いつく。

>もっとも、これ10年以上前の話だし、それで修正するとかいう話でもないけどな。

>瞬時に5通り思いついたとして、5年後に知らない技術を獲得した時に、あの時これ使えばもっと良くなったなあと思うとか。
0978デフォルトの名無しさん (ワッチョイ 8f59-2+Ho)
垢版 |
2020/05/09(土) 13:27:57.61ID:zV8Vx2bY0
>>974
ご指摘ありがとうございます。

相対参照だと./や../で省略されてしまうので
省略される箇所(ネットワーク上(インターネット上ではない)の決まったフォルダ)
を指定するためにカレントディレクトリで設定していました。

ちなみに複数端末でファイルを操作する事を想定しています。

もう少し勉強します。
0981デフォルトの名無しさん (ワッチョイ 6bac-V20a)
垢版 |
2020/05/09(土) 14:38:22.98ID:SO2yq4ky0
>>979
自分の言ったこと分かってねえじゃんww

>出来る奴は瞬時に何通りかは思いつく。

>もっとも、これ10年以上前の話だし、それで修正するとかいう話でもないけどな。

>瞬時に5通り思いついたとして、5年後に知らない技術を獲得した時に、あの時これ使えばもっと良くなったなあと思うとか。
0985デフォルトの名無しさん (ワッチョイ 7332-R2sI)
垢版 |
2020/05/09(土) 18:27:33.02ID:d0o5iTyS0
>>983
便乗してそのコード教えてくれせんか
0986デフォルトの名無しさん (バットンキン MMbb-6LGb)
垢版 |
2020/05/09(土) 18:39:39.46ID:3Qrhs3L2M
ある表があって一行ずつアクティブセルをループで下に移動させ、条件があった場合offset で特定のセルを集計するマクロを作成し使用してたんだけど、
アクティブセルじゃなくてcellで置き換えたら実行スピードが早くなった。
やっぱり画面が遷移すると遅くなるんだよね?
オートフィルタ組み込むと遅くなる?
0987デフォルトの名無しさん (ワッチョイ 6bac-V20a)
垢版 |
2020/05/09(土) 19:29:16.68ID:SO2yq4ky0
>>984

矛盾しまくってるがww
頭悪いなーVBA10年以上やってるんだろww
瞬時に5通りできるんじゃないんですかー?www

ID:KpBIrL5Ad
ID:74X5YOol0
ID:MibsCGor0

>バカと違って質問の意味が分かってる人はこういう答えになるから何通り等の方法等とならないことを知っている。

>出来る奴は瞬時に何通りかは思いつく。

>もっとも、これ10年以上前の話だし、それで修正するとかいう話でもないけどな。

>瞬時に5通り思いついたとして、5年後に知らない技術を獲得した時に、あの時これ使えばもっと良くなったなあと思うとか。
0988デフォルトの名無しさん (ワッチョイ 0b87-YOOL)
垢版 |
2020/05/09(土) 19:48:20.99ID:YHeP8Ot70
>>985
死ねよ
0989デフォルトの名無しさん (ワッチョイ 7f7f-sgQa)
垢版 |
2020/05/09(土) 20:09:54.40ID:7P+we5mg0
フォームからシートにデータを入力する場合、セルに値を入れるコードはどちらに書く方が良いのでしょうか。
シート側に関数処理書いて、フォーム側から引数渡す形を考えていますが、本来はどういう使い方なのかわからず。
0998デフォルトの名無しさん (ワッチョイ 6a02-gIrT)
垢版 |
2020/05/09(土) 23:43:47.15ID:G+eyUkVB0
俺の仕事はお前のものだ。
お前の仕事はお前のものだ。
お前の手柄は俺のもの。
俺の手柄は俺のものだ。

みんな違っていいじゃないか。
だって、人間だもの。
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 53日 15時間 35分 24秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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