TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
なぜ「staticおじさん」は叩かれたのか?
Visual Studio 2019 Part4
Lisp Scheme Part41
CoffeeScript
ネットワークプログラミング雑談
初心者の俺が初めて覚えるプログラム言語
SDL=Simple DirectMedia Layerでゲームだ
ふらっと C#,C♯,C#(初心者用) Part145
古代VBプログラマ質問スレ(Ver.6.0 まで) part65
OSSホスティング総合【SourceForge,GitHub,etc..】

Excel VBA 質問スレ Part65


1 :2020/03/17 〜 最終レス :2020/04/20

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part64
https://mevius.2ch.sc/test/read.cgi/tech/1575297834/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

2 :
>>1

3 :
>>1

>全スレ998
挿入か貼り付けかはっきりしてくれ

4 :
行をコピーして挿入操作
マクロ記録したら、Selection.Copy Selection.iIsert Shift:=xlDown が出てきたけど普通に再生できたぞ

5 :
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&

6 :
プラウザのウィンドウサイズを大きくした後で画面キャプチャしたら
満足の行く画質になりました。
>>5の質問は撤回します。

7 :
>>4
まじすか
コピー元が別ブックだったのでそのせいかも

8 :
>>5
キーボードマクロ最悪

9 :
リボンを自動的に非表示にする設定だととクイックアクセスに登録したものも含めてコマンドがすべて隠れてしまうんだけど
特定のコマンドのみ表示させておく方法はないかな?
マクロとして登録させて画像にマクロを登録しようとしたけど動かない。

10 :
>>9
うちのExcel2016だと隠れないけど、それ以降だと違うのかな
リボンの下に表示offでもだめなら
フォーム作って、UserForm.ShowModal=False という手もあるよ

11 :
>>10
>>9
UserForm.ShowModal=False はどういう方法?

12 :
>>11
自作フォームをカスタマイズメニューに見立てて自作のマクロなどを呼び出す

13 :
>>12
マクロを呼び出すのは簡単なんだけど、各コマンド(既存の機能)をよびだすのかできない
たとえば描写とかペンとか消しゴム機能とか

14 :
既存の機能が必要ならリボンを非表示にしなきゃ良いんじゃね

15 :
>>13
SendKeys "% 〜

16 :
>>15
ショートカットキーを設定してってことかな?

17 :
csvを読む場合で、見出し行とデータ行が文字と数値で形式が違う場合とかどう処理しますか?

18 :
>>17
パワークエリで読み込んで任意のデータ型に変換する

19 :
>>17
CSVを読み込む場合にブックとして読み込むことはまず無い。
というか、まずテキストとして読み込む。
処理も何も、全て自由に出来るぞ。

20 :
>>17
全部文字として読み込む。コードで数値として処理したいならcintやcdblでキャストすればいい。因みにワークシート関数にはNumberValueってのがある。

21 :
あれなんとかならんかな。
NULLがあるとコケるから、
いちいちIIF(A IS NOT NULL, CINT(A))ってやらなきゃいけないの。

22 :
VBA で、セルの指定しても行の指定が無効になってて、必ず1行目に表示されてしまいます。
何が原因でしょうかね?
教えてください。

23 :
>>22
お前の馬鹿頭

24 :
原因わかりました。すみませんでした。

25 :
ここの住民の霊性は暴力団と同じですね

26 :
ここだけじゃなく2chはどこも似たり寄ったりです
貴方が来るような場所じゃありません

27 :
>>25
霊性?
馬鹿確定
原因としては正しかっただろうが

28 :
>>22
ソースコード書けないの?
君書いたのが本当にセルの指定をしてると信じる人がいるとでも?

29 :
よろしくお願いします。

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

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

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

どのように書けばよいでしょうか?よろしくお願いいたします。

30 :
For文をRowCntって変数で回していると仮定して
If Cells(RowCnt, 3).Value Like “*一言コメント:*″ Then
で引っかけるとか?

31 :
VBAなくても関数だけで目的達成しそう

32 :
>>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

33 :
>>15
どんな機能でもショートカットキー設定できるの?

34 :
>>29
VBAでないとだめなわけじゃないならExcel関数でやればいいと思う

35 :
>>33
Alt押してみ

36 :
>>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

37 :
ここは上級者向け?
ド素人が少しずついろんなサイトや動画見て覚えようとしてるレベルじゃダメかな

38 :
>>37
初心者も上級者もキチガイも見てる
みんなが毎日見てるわけじゃないから、タイミングが悪いと質問に答えてもらえないこともある

39 :
いろんなサイト見た方が早い

40 :
FileSystemObjectでFilesのコレクションょ取得したあと
それぞれにアクセスするにはどうしますか?
Files(1), Files(2)のようにするとエラーが出てエラいこっちゃとなります。
For each文ならできるのですがそこまでするほどのことではない時には?

41 :
コレクションょ

42 :


43 :
暇だし、見てみた

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とか分かりやすいがね

44 :
itemでナンバリングされていないんじゃないか?
だからitem(1)やitem(2)で取得できないのでは。
それゃファイル名を()の中に書けば取得はできるけど。

45 :
for each でいいやん

46 :
「そこまでする」の考え方がまずおかしい
中身がたとえ1個でも2個でも普通はコレクションにはFor Eachを使うもんだぞ

47 :
>>45-46
このハゲー!
違うだろ!

最初にfor eachはやらないと言った。
コレクションの代表ということで任意の1個だけを選んでそのプロパティ等を調べる、
ということはプログラミング経験がある程度あればそういう状況に遭遇することはたまによくある。

48 :
fsoのfilesコレクションには通常のコレクションみたいにインデックス指定が出来ないのよね
countとitem(key)プロパティしかない
ファイルシステムの違いとか、歴史的経緯からかはしらんけど
だから基本for eachで他の形にする

49 :
>>48
そんなことはとおの昔に知ってるから
ここで質問をしたのだ。

50 :
ID:nn3rUaIL0
馬鹿はR

51 :
では次の方

52 :
インデックスが使いたいなら自分で配列でも作り直せばいいのに

53 :
不毛だな

54 :
Exit Forすればいいんじゃまいか

55 :
OpenDocumentスプレッドシートのデータをADOで取得する方法ある?
EXCELに変換しろってのは無しで。

56 :
>>44で自分で答だしてんじゃん

57 :
ドライバ自作しろ

58 :
プラスとマイナスはあるから丸ドライバー作るわ

59 :
ファイル入出力に使うopenやinputが何者か(関数?メソッド?など)知りたいです
これらの機能はなぜオブジェクトブラウザに乗っていないのでしょうか
マイクロソフトのウェブヘルプにはステートメントとして乗っているようですが
ステートメントというのは関数やメソッドなどの分類ではないですよね?
ご教示お願いします。

60 :
>>59
ステートメントというのは関数の祖先にあたる概念
コンピューター言語が発明された初期からある命令文の分類の一つ

61 :
馬鹿に馬鹿が答えている

62 :
VBAを覚えようとしてる初心者以前だが
まず何となくルールから覚えてる
=は同じじゃなくて←の意味ぐらいにとらえておく
あとはコードというか使いそうな単語を少しずつ
msgboxとかRangeとかactivecellとか
でもとっかかりがわからんわ
難しすぎですな…

63 :
覚えるのは結構だけど、普段やってる作業をVBAで再現するとこから始めると飽きずにやれるんじゃ
コピペ作業、シートコピー、ボタンで特定の計算とかね
だんだんCSV読みたくなったりして高速化したくなったりして、そうやって覚えていく

64 :
TEST

65 :
ユーザーフォーム上にあるボタン1を押すとボタン1を非表示にしてフォームのキャプチャを取得。
その後ボタン1を再び表示して終了。
みたいなものを作りたいのですが
SendkeyでAlt+Printscreenを送っても
素の状態ではボタン1が残った状態のものがキャプチャされ、
Waitをかけると今度は画面全体のキャプチャになってしまいます。
フォームをダイレクトに画像ファイルにする、とかでも良いのですが調べても中々応えに辿り着けなかったので皆様のお知恵をお借りしたいです。
何か良い手はないでしょうか。

66 :
以下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

67 :
すみません。
情報の伝達に齟齬がありました。
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

68 :
MacでもVBA使えますか?

69 :
使えるけどwindowsと全く同じように動くかまでは知らん

70 :
新しい天啓が下った。私は馬鹿ですらなく、場であり、これが私の仕える神のような気がしたが違ったような気がした。
忠実に表現したらこうなった、つまりそういうことなんだろう。

71 :
>>66
標準モジュールに書いてるか

72 :
WEBクエリはhttpsだと遅いすか?
そうなったサイトが急に読み込み遅くなったんすけど

73 :
初心者はまずここ見とけみたいなサイトとかYouTubeの動画ありますか?
宣伝込みでも俺が踏むだけなので良かったら教えて欲しいです
本当に何から見てけばいいのかわからない
asとかretとか当たり前に出られてもわからない…

74 :
知らんがな入門書買え

75 :
>>73
動画でプログラミングを覚えるのはとても難しい
エクセルの使い方や開発環境の整備とかなら分かるけど
言語を覚えるのは本を読んでコードを書く方が早いだろう

76 :
>>73
https://www.sejuku.net/blog/6516

77 :
retって何?

78 :
>>75
>>76
ありがとう
とりあえず、マクロからあるURLやoffice系のソフトを呼び出すコードをネットから丸パクリしてみたんだけど結局これが良いのか悪いのかそもそもルールすらあまりわかってない
サイトや本で必死に勉強しますわ

https://i.imgur.com/Llw26vN.jpg
https://i.imgur.com/CEIjgGb.jpg

79 :
字で書けよ基地外か

80 :
図形のグループ化についてです。

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

これを円と円の中のテキストをそれぞれグループ化してShapeの名前をテキスト名にするにはどうしたら出来ますか?

81 :
>>80
グループ化はGroupメソッドを使う
For Eachを使えば図形がいくつあっても関係なく同じようにできる

82 :
>>80
shapeオブジェクトでいじる

83 :
図形をVBAで複雑にいじろうとすると悲しみしか生まなさそう

84 :
Worksheets("min").Range(Cells(N, 2), Cells(N, 100)) = "999"
これで複数セルに一括入力したいのですが
アプリケーション定義またはオブジェクト定義のエラーです
と出ます。
何がいけないのでしょうか?

85 :
Nを定義してないんじゃない

86 :
cellの前にもシートがいる

87 :
With Worksheets("min")
.Range(.Cells(1, 1), .Cells(20, 2)) = "999"
End With
できました^^ありがとう

88 :
それでいい。

89 :
いえいえ

90 :
検索して違うシートから値を 持ってくるマクロで持ってくる値が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としたいです。

91 :
cがnothingの時c.rowがエラー
バラせ

92 :
馬鹿がゾロゾロ出てくるのは何で?

93 :
春休みだから

94 :
>>91
If wS1.Cells(c.Row, "Z").value < 0 Thenでもエラーが出ます
With Worksheets("data")が邪魔をしてるとかですか?

95 :
"Z"で指定できたっけ

96 :
>>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プロパティで呼んだ方がいい

97 :
>>92
答らえれない馬鹿以下の癖に?

98 :
範囲に名前はなぁ・・。
上手く使いこなせればいいが、
みんなで共有するファイルに使うと、
知らない間に#REFだらけになってるwwww

99 :
>>71

レスありがと

標準モジュールに書いてない。
しばらく、やってなかったんで忘れていた。
すみません

100 :
>>98
異常時に例外が投げられるように設計するのは普通だと思うんだが・・・

101 :
>>100
名前を付けるのは、コードと関係無い所で実装されるので個人的には絶対使わない。
というか、Cellsを使うよ。
2次元配列的にもぴったり来るし。
寧ろ、Rangeの方が使わない。
尤も、Cellsでも列を文字で指定するのはやらない。
AF列が何列目か分からないって?
イミディエイトで?Range("AF1").Columnとでも入れてみろ。

102 :
>>101
で、コメントで何列かとか、項目名とか書くわけ?

103 :
>>96
>>101
名前を付ける派
可読性が高い方が良い
VBAは見にくいコードが多い

104 :
>>101
名前定義が弄られるってことはロックしないで使うんでしょ
猶更、セル挿入なりで意図した場所とズレてても気づかずに成功し続ける方が危険だと思うんだが
で、セルを挿入したい時も一個一個数値をずらしていくの?
ワークシートの見た目が二次元配列である事とコード内容を一致させる必要性も感じないんだが、
もしかしてハードコーディングしてるのか?
イミディエイトウインドウで毎回インデックスを調べろっていうは面白すぎるから止めて欲しい

105 :
Shapeの当たり判定の計算方法を教えて下さい。
基準の円のShapeにTextBoxが当ってたらTrue、当たって無ければFalse
円は選択時の□の面積じゃなく実際の円の大きさ。TextBoxは選択時の□の大きさ。

106 :
なぜそんなことを

107 :
>>105
表示位置とサイズから比較したらいいんじゃね

108 :
当たり判定だからゲームじゃないの?
Corei世代でも60fpsでないから使いたくないけど。

109 :
>>105
専用の関数などは用意されてないので、TextBoxの頂点と円の座標を比較したり、円の中心からの距離を三角関数で計算して調べるしかない

110 :
VBAであえてゲーム作ったりするのは
芸ではあるけど開発効率的に筋は悪いよね
グラフィックにこだわるなら別言語推奨

111 :
>>102
普通は定数で行、列を宣言するわな。
>>103
見にくいコードは書いてる奴の力量次第だろ。
>>104
ロックはしない。
そんなもんは解除されるかもしれんし、当てにしない。
というか、作ってるもの次第だね。
ワークシートの見た目と二次元配列を一致させるとか笑わせるなあ。
少し慣れた奴なら列も数値で扱うのがぴったり来るんだよ。
何故なら、最初から二次元配列的に考えるから。
VBE上に自作のメニュ―作って、入力するだけで列名←→列数はわかるげとな。
作る力量無い奴はイミディエイトで調べりゃ良いだろ。
VBEのCommandBerでイベント扱うのはクラスが必要だし、上級者の領分にはなるかもな。
VBE弄るVBAは会社じゃ使わないから通常のCommandBarでメニュー作ってやっても良いんじゃね?
どっちにしても時間は考えることに使ってるんで、毎回イミディエイトで調べても大した話じゃね―んだわ。

112 :
>>63
今の若いヤツらはそういう説明じゃ200%挫折する。普段の業務を自動化っていう感覚がわからないそう。やっぱスマホタブレット世代はPC=ワープロにしか思えんのかもな。

113 :
若いほうがわかりそうなイメージあるが

114 :
>>111
ロック外されたくないならパスワード付ければいいじゃん

115 :
>>114
パスワードwww

116 :
>>111
> VBE上に自作のメニュ―作って、入力するだけで列名←→列数はわかるげとな。
まさか自慢じゃないよね?w
傍から見てたら馬鹿なことしてるなとしか思えんし

117 :
共有編集可能にしたら更新は5分間隔だけどVBAとかで1分以内にできないかな?複数のパソコンで映してる同じエクセルファイルの内容を別のパソコンから共有編集で編集して保存したら1分以内に複数のパソコンにも表示を反映させたい。

118 :
あ、どうせ、コピーしても意味ねぇよ。記憶してるのPCじゃねぇから。

119 :
考えまとめるためにPC使ってるだけ、ただそれだけなんだよ。

120 :
>>116
君にできないからと言って、そんなもんが自慢になると思うかね?

121 :
>>96
それでも同じエラーが出ます…

122 :
>>120
日本語の理解力がないのかな?
自慢にもならないことをいちいち書くとかバカじゃね?
って言う事な

123 :
>>121
wS1.Cells(c.Row, "Z").value < 0
そもそもこれ必要?

124 :
いや、いらないのはそっちじゃなくて、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 に代入してなかったってオチじゃないよね

125 :
>>122
悔しいからって一々反応しなくて良いんだぞwww

126 :
>>125
ブーメラン乙w

127 :
反応したら負けだと(みんな)思ってる

128 :
どこで受けたストレスをここで発散してるんだろう・・・

129 :
>>127
>>125に言ってやれよw

130 :
ここの人等は本当にきついね
一部だけかもしれんけど
他スレ建ててもどうせそこにやってくるし困ったもんだ

131 :
いいから質問しろよ
俺が優越感感じられるように割と簡単なやつな

132 :
ワロタw
ワイもドヤ顔で回答したい

133 :
禿げのくせに

134 :
>>133
このハゲ!

135 :
天才な人、教えて下さい。

フォルダAの中にフォルダa1があってこの中にxxx.zipがあるとします。
このxxx.zipを直接クリックしたりしないで解凍するプログラムを書くのはVBAで可能でしょうか?

136 :
たまたま知ってたけど天才じゃないから教えられない
残念です
無念です

137 :
俺も天才じゃないんだわ
いるんか?このスレに、天才が

138 :
>>135
馬鹿はR

139 :
>>135
「powershell zip 解凍」で検索!

140 :
>>139
どうもありがとう!

141 :
>>117って難しい?

142 :
zipをxlsxにすれば、VBAを使わなくても開くだけで解凍できる。どこに解凍されるかは知らんが。

143 :
>>126
zip解凍ぐらい大して難しく無いんだから答えてあげたら?

144 :
>>143
既に>>139で答えられてるだろ
スレの流れも追えないのか?w

145 :
>>141
VBA 共有編集でググレば参考になる所が出てくる。

146 :
>>144
バーカwww

147 :
うゎ、真性かよw

148 :
そういやxlsxがそもそもzipファイルなんだよな

149 :
そーなのか
道理で大昔作ったフォーマットを作り直してみたら容量が半分程度だったんだ
効率的なコード書けるようになった俺スゲーって訳じゃなく、エクセルさんが凄かったのね

150 :
拡張子zipにして展開すると画像ファイル取り出せるしな

151 :
今さら次郎

152 :
これから三郎

153 :
終わりに四郎

154 :
アッと驚くタメ五郎

155 :
>>151
好きだよ六郎

156 :
ネットでこんな素晴らしい物を見つけたんだけれども、これがデータ量が多いと結構時間掛かるんだけど、高速で図形として書き出す方法って他にありませんか?


http://izawa-web.com/excelbcad/dxfreader.html

157 :
>>156
CADアプリで画像にでも変換してシートに貼り付けた方が早くて綺麗
オートシェイプに変換すると重くなるし比率が狂うし、メリットがなさすぎる

158 :
>>157
貼って終わりならそれでもいいんですが、数あるCADデータの中から指定のデータを呼び出してエクセルに貼り付けて線の色とか文字を取得したいんですよね。

159 :
>>145
更新時間を短くする方法は載ってなかった

160 :
あるマクロを開いた瞬間に自作したユーザーフォームが出るようにする
それと同時にエクセルファイルを選択できる ファイルを開くウィンドウが出るようにする
ド基礎以前だと思うのですがおしえていただきたく、、

161 :
ググれば全部出るのに何故ここできく

162 :
>>160
Workbook_Open()
UserForm1.Show
Application.GetOpenFilename

163 :
ド基礎以前発言がひっかかるな...

あるマクロが他人の作った編集できないマクロなら難しいね
パスワードクラックはNGで

164 :
少しくらいの調べる能力も持たないお子ちゃまが多い

165 :
ド基礎以前のこともわからないやつに教えても理解できんだろう

166 :
>>162
ありがとう、ネットで捜してコピペしながら頑張ってくわ
起動すると作ったユーザーフォームが開きつつ
ファイルからエクセルを選べるウィンドウを出す

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

ボタンによって2つの散布図に分けられる
がんばりやす

167 :
>>164
人に教えることで自分も成長する。

168 :
成長してないやん

169 :
>>162
そりゃ駄目だ。
モーダルとモードレスを調べよう。
モーダルでやりたかったらフォームのInitializeかActivateイベントだな。

170 :
>>159
AutoUpdateFrequencyプロパティじゃね?
ググっただけだけど。

171 :
>>167
それはあるな

172 :
>>170
それ、イミディエイトペインで試したけど、5未満はNGだよ
>>145の共有編集って、Excel2016で実装した、OneDriveとか使ってクラウドでやるやつだと思ったんだけど、違うのかな
×共有編集 ○共同編集 らしいけど

173 :
モーダルあなた疲れているのよ

174 :
自動更新の間隔を短くするのが無理なら手動でできないのかな?
強制的に切断と接続を繰り返してみたらどうだろう

175 :
>>173
やっぱり、逆だよね

176 :
>>172
ローカルのつもりだったんだけどそれなら共同編集になるのかな?

177 :
セルA1とB1の数値が一致しない場合はC1を塗りつぶす、というのはできるのでしょうか?

178 :
>>177
If A1 <> B1 Then [C1].Interior.Color = RGB(1, 234, 56)

179 :
>>178
ありがとうございます!

180 :
A行の値を見て、その値が1だったら、空白行を上に2つ入れたいのですが、できますか。

181 :
間違えた。
A列の値を見て、その値が1だったら、空白行を上に2つ入れたいのですが、できますか。

182 :
できます

183 :
>>180
Sub Macro1()
  For r = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If Cells(r, 1) = 1 Then Rows(r).Resize(2).Insert
  Next
End Sub

184 :
>>183
ありがとうございます!できました。

185 :
ほんまこの程度自分で考えないのかなあ

186 :
子が吐き出したcsvデータ(子の状況により1ファイル数行〜数百行程度のデータ00000000.csv〜FFFFFFFF.csv)を親で吸い上げて管理用に整理するマクロを作成しているのですが子のデータ数が多くなったせいか親の処理を実行中にExcelが落ちるようになりました。
現状では
Workbook.Open 00000001.csv
でファイルを開いてから配列に叩き込んで処理しているのですが、
他に何か開かずに直接配列に収納するとか別の開き方など良い手段はありますでしょうか。

187 :
>>186
その説明では落ちる原因がわからんので対処のしようがない
とりあえずテキストファイルとして開いてSplitで配列に入れるとか

188 :
>>174
自動更新しても更新されない
強制的にはできないね

189 :
>>174
最初、自前タイマーでの自動保存を提案しようと思ったけど、全ユーザーの同期とか排他処理とか必要になるからやめた
同時使用数にもよるけど、現状の5分ぐらいが実用限度だと思う
それでも問題があるから、MSも共有ブック機能を非推奨にしたんだろうしね

190 :
>>186
まず落ちる原因の特定が必要
本当にデータ量が原因かどうか?

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

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

それでもアルゴリズムではどうにもならない量なら
SQLとかのデータベースに移行する

191 :
https://oshiete.goo.ne.jp/qa/1972570.html
ActiveWorkbook.SaveAsにするとファイル名変えずに保存できる理由を教えてください
Copyした時点で別ブックが作られるんですか?

192 :
マクロで作られた印刷ボタンを押すと両面印刷で出てくるからこれを片面印刷に統一したいんだけどどうしたらいいの?

193 :
>>192
マクロを書き換える
印刷方法の変更はプリンターごとに違ってて、Excelのマクロの中でも一番面倒な部分だから、会社でわかってる人に聞くのが早い

194 :
プリンタ登録を2つに増やして使い分けるのが簡単。

でもWin95のころはコピーするだけでプリンタ増やせたけど年々難しくなるよね

195 :
正直印刷は、機器変更、NW、印刷位置、紙質とかでトラブルが非常に多くなるから、
金、人命とか絶対にVBAで自動化しなければ行けない理由がない限り手動にするようにしたわ
印刷部分だけPDFにして置いておくとか

196 :
マクロは印刷プロパティを出すところまで。
それ以上はトラブルの原因になるからやめとき

197 :
そもそも紙にこだわるのが非効率で
電子化するのが本来の理想ではある

198 :
プリンタのプロパティでプリンタの設定自体を片面印刷にしておくと片面印刷になりますか?

199 :
そのくらい自分でやって試せよ

200 :
>>186
CSVをWorkbook.Openで開くのが駄目。
OpenステートメントとかFileSystemObject使う方が良い。

201 :
>>197
そんなの職場や利用目的によりけりだから

202 :
コントロールパネルからプリンタのプロパティで片面印刷に設定したんだけど片面印刷オンリーになりません
どうしたらいいですか?

203 :
やったこと全部書き出してプリンターメーカーに聞け

204 :
特定の文字列のみ文字色を変えたいんだけど、
置換を使うと指定した文字列を含むセルに入力されている全ての文字の色が変わってしまう…
現状では数百数千セルある中から文字列を選択して文字色変更を繰り返す、という辛い作業を続けているのですが
この様に、指定した文字列だけの色を変更って出来ませんか?

205 :
>>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

206 :
>>205
何か少し違う気がする。
rの中で対象文字列が1回しか変わらないんじゃね?

s=instr(s+1,r.Value,対象文字列)でsが0になるまでループかな?

207 :
何から覚えようVBA

208 :
>>198
やってみてどうなった?

209 :
>>207
覚えるのが目的じゃなかろう

210 :
>>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)

211 :
Windows10になってから、アプリごとに印刷設定を覚えるようになってややこしくなった
以前はプリンタのプロパティからデフォルト状態を決め打ちできたのに

212 :
>>206
その辺は仕様がはっきりしないから何とも言えんし
そもそも丸投げを受けたつもりはない

s+1だとaaaaaにたいしてaa指定したら5文字全部色変わるけどそれが良いのかどうかわからんだろ

213 :
4文字目から3文字赤に変えたマクロの記録
ActiveCell.Characters(Start:=4, Length:=3).Font.ColorIndex = 3

214 :
まさかシート毎に印刷の画面から片面印刷を選ばなきゃ両面印刷をされるなんて知らなかったわ

215 :
プリンター関係の情報はシートごとになってるから。
手動ですべてのシートを両面印刷にする方法はあるけど。

216 :
シート全選択してプリンタ設定変更してからやればいい

217 :
シート全選択してプリンター設定してもダメなんですよね。

218 :
あきらめろん

219 :
>>217
上書き保存してファイルを開き直せ

220 :
dwgファイルをどうにかしてEXCELに図形で取り込みたいんだがなんか方法ありません?
家の見取り図みたいなファイルなんだけど。

221 :
>>220
DXFに変換

222 :
>>220
後輩にやらせる

223 :
>>220
JacConvert

224 :
セル右クリックしたら出てくるメニューを禁止に出来ない?
書式設定とかコピーとか貼り付けとかメニュー自体出ないように

225 :
>>224
サブクラスで出来るかどうか。
ここには答えられる程の上級者が居ないと思う。

226 :
保護かければ?

227 :
>>226
保護かけると使えなくなる機能があるから無理なんだ

228 :
これは?普通にググったら出てきたぞ
https://www.moug.net/tech/exvba/0150035.html

229 :
普通にやり方あるぞ

230 :
エクセル2007についてです
セルをクリックすると、カレンダーが表示されて、そのカレンダーの日付をクリックすると、セルに日付が挿入される
という形にしたいのですが、ここで問題があります
一つはAccessがないため、カレンダーコントロールがないのと、もう一つはインターネット接続不可端末のため、どこからかDLするというのができないです
この場合のカレンダーから日付取得をするというのはできないのでしょうか?

231 :
>>230
ボタンを横7列、縦6つ並べたカレンダーコントロール的なフォームを自作すればいい
https://ateitexe.com/excel-vba-calendar-control/

232 :
カレンダーのシートを作って、そこから選択させるとか

233 :
>>231
早速参考にさせていただきました
ありがとうございます

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

まだvbaいじり始めた身としてはここまで複雑だといじりづらいというか

234 :
>>224
BeforeRightClickイベント

235 :
>>221
調べるとDXFはTextファイル形式で出来ているみたいでネットで調べながらやってみたけど、重い。まぁ俺の書き方が駄目な気もするけど。線の数が4万とか超えてる。

236 :
作者不明のファイルを修正しているのですが、そのファイル自身を指定するのにファイル名で
記述してありました。これだと「●●Ver1.0.xlsm」→「●●Ver1.1.xlsm」のようにファイル名を
変える度にコードを修正しなくてはならないためThisWorkBookに変えようかと思っているのですが
その場合なにか弊害とかあるんでしょうか?

237 :
シートを全選択したら一括で変更できるのか

238 :
>>236
弊害は無いよ

239 :
そのファイル自身だと完全に明確で揺らがないなら、thisworkbookでいんじゃね

240 :
どこから参照されてるのか全部調べないとわからないんじゃないかそれ。
まあThisworkbookを知らないだけの可能性は高いが。

241 :
>>238,239
ありがとうございます。
今日内容を確認してきましたが、マクロが記述されたブック(A.xlsm)上でシートを作成し、それをコピーして
新規ブック(B.xlsx)を作成してからもう一度A.xlsmの特定のシートをアクティブにする、という処理の中で
A.xlsmのブック名を明示してありました。
今日は時間がなくて試せなかったのですが、この場合でもマクロが記述されたブックはA.xlsmなので
ThisWorkBookで問題ないかなと思ったのですが、それであっていますでしょうか?

242 :
>>240
ThisWorkBookを知らないというかちゃんと理解していないのはその通りだと思います。
ThisWorkBookの主体がが変わる場合があるということでしょうか?
マクロ実行中にほかのブックに記述されたマクロを利用したりすると変わる、とかですかね?

243 :
ThisWorkBookはプログラムが記述されているワークブックを参照せよっていう意味だからブックAを実行中にアクティブがブックBに切り替わったりしてもブックAに記述されたThisWorkBookはブックAを参照する

244 :
エクセルテンプレートを開いた状態

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

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

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

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

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

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

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

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

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

これをなんとかマクロかする案があればご教授お願いします。

245 :
可能です。

246 :
テンプレート(.xlt .xltx)は何に使うの?

247 :
>>245
その一言でも希望があってありがたい
どういう流れで作ったらいいか何か構想のヒントなどあればいただきたいです
・テンプレのエクセルにボタン設置
・テンプレ開くと同時にユーザーフォーム開くようにしてテキスト選択できるようにするのか
・そもそもVBAがまだ人間になれてない猿並のスキル

>>246
テンプレは.xlsxです、普通のエクセルの

248 :
>>244
txtデータは、例えばカンマで区切られてるとか、空白で区切られてるとか、決まってるの?
内容的にはVBAがある程度使える人なら難しくないと思うけど、ちょっとネットで聞いて作ろうとかいうのは難しいんじゃないかな。

249 :
txtファイルがどのくらいの数あるのかで、どういう手順が良いか違ってくると思います。

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

txtファイルがたくさんあるとこの手順は面倒なので、同一フォルダに入れてなんらかの順番で読み込むようにするとか。

250 :
>>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くらいやったりしてます、、

251 :
>>249
レスありがとです!!!そこです!
日によってデータ数が違って
5つの日もあれば30の日もあれば75の日もあります
ボタン作って該当するデータの数を任意で選べたりできないのかなぁと妄想してます

252 :
この貼り付けるエクセルはそもそもこんなのでテンプレなの?っていうは一応エクセルの関数で
他の何種類もあるシートに複数の関数で出せる紐付けしてあるので
テンプレというか自分なりのベースのようなものです

本当はその関数すら慣れてる人ならVBAで余裕で組むんだろうなと思うのですがそんな欲ばる資格がまだないのでまずはこの作業を…

253 :
GetOpenFilenameメソッドでダイアログで複数のtxtファイルを選択するか、「転記前フォルダ」とかに対象のtxtファイル入れておいて、フォルダ内をfor eachですべて読み込むか。読み込み済みのtxtは自動で「転記済フォルダ」に入れるか削除。
どちらにしてもtxtファイルの名前順に読み込むようになるだろうから、そこを一工夫する必要があるかも。

254 :
>>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

255 :
>>247
マクロ記録してそれを加工すればいい

256 :
>>254
うおおおお
マジでありがとうございます!
いま外出中なので帰ったら速攻でVBE開いて取りかかります!!
他のこんな猿にアドバイスくれる人達に感謝のみ
批判されて当然のスキルしかないのでそういう覚悟もして相談させてもらってます

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

>>255
それも頑張ります、まず加工する知能を身につけます

257 :
個人的にはCHDIRと#1ってのが
気になった

258 :
恋だな

259 :
6月て
こんなんIT系の仕事じゃなくても普通に1日で理解するやろ。。

多分セルごとに書き込むからファイル数とデータによっては遅くなるな

260 :
クリップボードに整形したデータ入れてペーストでもいいのよ
タブで右のセル
改行で次の行

261 :
VBAについて詳しい方に質問です。
現在VBAでオートフィルタの自動プログラムを組んでいます。
そこで質問があります。以下の様なデータがあったとします。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
私の名前は、太郎です。
私の名前は、岩崎です。
あなたの名前は、太郎です。
あなたの名前は、岩崎です。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
検索ワードとしてスペース区切りで「あなた 太郎」と入力された場合
「あなた」と「太郎」を同時に含む行のみをフィルタリングするには
どういう記述を Criteriaにすれば良いのでしょうか?
Criteria1:="*" & [検索ワード] & "*"
現在こんな感じで記述してますがうまく動きません。
AND条件、そしてOR条件で指定する方法を教えてくださいm(_)m

262 :
>>261
それやるならオートフィルタじゃない。
アドバンスフィルタ。

263 :
>>261
シート上でオートフィルタかける時にできること以外のことはできない

264 :
どうしてもその記述でやりたいならワードをスペースで分割してから条件2つ指定する

265 :
ありがとうございます。
アドバンスフィルタとやらを調べてみます。

266 :
>>261
And条件の場合はこう書く
Criteria1:="=*あなた*", Operator:=xlAnd, Criteria2:="=*太郎*"

267 :
>>266
ありがとうございます!!

268 :
いえいえ

269 :
>>254
これを、やってみたけどcellsのところでエラーがでます、うーん
頑張ります

270 :
>>269
ヒント 変数 r

271 :
>ヒント
ウザっ

272 :
>>269
それはたぶん、txtファイルの中身が想定外
例えば5行以下しかないか、C列にデータが入ってないか

273 :
>>269
すまん。変数 r はforで回ってた。

274 :
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

275 :
>>274
Dim a As Long
For a = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
  If 0.05 <= Cells(a, 19) And Cells(a, 19) <= 0.98 Then
    Rows(a).Delete
  End If
Next

276 :
ワークシート機能とか使わないなら、
・その表を全て一気にもにょっと2次元配列(tableA)にいれる(コンマ数秒)
・2次元配列(tableB)を一旦定義
・tableAの各行(イメージね)をforeachする。++カウントする変数をつくる。これはtableBの行数。
・foreachのなかで、tableAのS列がその条件に合致しなければ、tableBに行のそれぞれの要素を代入する(redim preserveしながら)
・できたtableBをどこかにペタッと貼る

Excelぽくやるなら
・オートフィルタする
・2次元配列に一旦もにょっとコピーする(可視セルのみ、CurrentRegionかな)
・シートをクリアするか他のシートにコピーした2次元配列をペタっと貼る

277 :
ちなみに行をforeachしながら行を消すとズレが生じるんじゃね、しらんが

278 :
>>254
色々いじっていますがこれをどう手直ししていいかわからず…

たとえばこれをテキストを変換したときにF2:F13にくるデータを
エクセルにはB5:B16、C5:C16と順番になるよるに出力するようになるにはどう調整すればいいのか、がんばって調べてます

279 :
>>275
ありがとうございます。

280 :
>>278
ヒント: F1キー

281 :
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が存在してて
どこを今度は変えたらいいかわかりません

282 :
>>281
cとかfは変数だよ
ワークシートの列じゃない

283 :
猿とか以前にそもそも基本知識すら身に付けてないのでは…

284 :
そう、変数なんだというとこまではぎりぎり何とかわかったんです
ただ、引っ張ってくるテキスト側の列をどこで制御してるのかがわからず
>>283
完全にその通り
単純に勉強不足
ネットでかじってばかりじゃダメだと古いけど本も借りました
ただ本当にマジで難しい…

https://i.imgur.com/7Ujyfqa.jpg

285 :
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

286 :
うお、変数の宣言をあらかじめわかりやすくしてくれて馬鹿な俺を誘導してくれようとする人が!!絶対そんな感じのありがたい人だ!
今から車に乗って帰ったら速攻PC開きます!−−!!

287 :
>>281
>>284
まずVBAの入門書を読んで基礎知識を
整理するといい(するみたいだけど)

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

本当はなるべく「f」も「file」とか具体的に
命名した方が分かりやすくていいと思うけど
(ファイル用変数とセルの列を混同した一因だろうし)
まず日本語のレベルで言葉を整理しよう

288 :
>>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

何度やっても一瞬で完璧に処理が終わる…
だがさっぱり意味がわからん、、
本読みます。。

289 :
ああ、ダメだ。'でメモりまくったけど
出力する側のエクセルシートの列の指定はわかったけど行の指定がわからなかった。勉強ですね。。
みなさんありがとうございました。

290 :
ちらっちらっ

291 :
ごめん、ダメだ。助けてください。
混乱しまくってます。全然違った
読み込むテキスト側の行指定がわからない、、
ベースの方にテキスト2行目8行目からを指示、
とかそれをしないと会社で対応できないです…

292 :
そりゃ変数すら知らない知識レベルならこんな短時間じゃなんもできんだろう…

293 :
先輩曰くとりあえずわからなくても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日
毎日勉強しないとなぁ。ほんと

294 :
PDFファイル(画像)をEXCELに貼り付ける際の画像の素の大きさってどうやって取得できます?

295 :
いきなり別ファイル(txtファイル)読み込んだり、配列変数あったりで難しいよ。
本来はもっと基礎からやらないと。

296 :
>>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

297 :
>>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日

298 :
>>296
Tekist ワロタ

299 :
TekisutoでもTextでもTexteでもないのな

300 :
今日、神懸かり的に職場の測定機のPCのツールとして産声を上げました
あとは起動と同時に出るユーザーフォームにボタン4くぐらい作って割り当ててとりあえず完成しそうです

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

自分で変えたのがわかるように誤記ぐらいにしとかないと何かのコマンドやコードがわからないので
textって打ったら先頭が大文字に変わるから
こりゃいかんと

301 :
なんでもいいから一つ作れってのは作ってもらえって意味じゃないと思うな

302 :
活気が出てええやん
過疎スレやし

303 :
変数の定義や宣言をとにかく最初にする癖をつければ
後でわかりやすいことが本でわかり
そして英字じゃなくてもいいことに驚きました

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

とか和文字だと支障でますかねこれ

304 :
個人的には変数名で日本語は避けてる。
逆に読みにくいので。

305 :
拙者も日本語はコメントで書くようにしてコードは英数字で書くようにしている

306 :
なるほど、俺も英字で作る癖つけた方が良さそうですかね
字の色でわかるだろ…とは言え、なんかの関数やコマンドと似てるとやはり最初は難しいですね
Tekist
Fname
Fpass
shseeet
とかにしてこれ俺の宣言した変数だわ
って最初は作ってみます
あざす!

307 :
変数の付け方とかで、書いた人の実力が分かるという説もあるから。
私は小文字で始めるキャメル式が見やすいと思って大体統一してる。

308 :
> とか和文字だと支障でますかねこれ
今時C/C++ですら変数名に漢字使えたりするぐらいだから問題ない
特にフォルダーパスをFolderpassとか書くような人は積極的に使うべき

309 :
VBAだとそんなに困ることはないんだけど、.netはライブラリが膨大すぎて、既存のメソッドやプロパティと名前が被るかどうかの確認が面倒
あと、語彙力が足りなくてユニークな英単語が思いつかないとか、辞書で調べて付けた変数名があとから見返すと意味がわからないとかある

310 :
>>309
>語彙力が足りなくてユニークな英単語が思いつかないとか
曜日、曜日って英語でなんて言ったかなー
せや、yb ですましたら

311 :
最近プログラム自体始めた初心者です。
日々勉強ばかりですので、汎用性が高くなるよう目指し、
知識を入れてはコードを改良し、それを外部保存、そして
実行するブックで呼び出して使っています。
ついこないだ引数という便利なものを知り、さっそく使っているのですが、
ひとつ疑問が。
「特定セルに、作成したリストの上から順に内容を書き込む」という
簡単なfor〜nextループマクロを使いまわしたいのですが、そのループ処理内容を
callなどから設定することはできるのでしょうか?
(たとえば、あるブックでは印刷処理したい、けどこっちではシートコピー処理したい、
など)
引数で、特定セルやリストの開始行は設定できたのですが。。。
宜しくお願いいたします。

312 :
>>311です。一部分かりづらかったので訂正いたします。
×「そのループ処理内容をcallなどから設定することは〜」
〇「そのループ処理内容を、実行するブックから設定することは〜」

313 :
馬鹿が一気に出てきたのはコロナウイルスで脳炎や痴呆症でも発症するのか?

314 :
>>311
サブルーチンの中にブック名を判定するIfを入れるとか、引数を増やして処理を切り替えるとか、方法はいくつもある

315 :
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

見様見真似というかネットからパクってユーザーフォームのボタンに追加できました。
このスレの人たち凄いです

316 :
いい加減に馬鹿は消えろ

317 :
>>311
他のナウい言語みたいに関数ポインタとか使いたいのだろうが
おとなしくコマンド文字列でも渡してselectでもしとけ

318 :
ナウい変数名を考えようと思って色々試したら、結構いけるじゃん。

Dim ヽ, 卍, ¶, , f, , , ≒, ♪

♪ = 1
Debug.Print ♪

319 :
あ、普通にこれでいいか。

Dim 骸骨剣士, 死霊の騎士, 幽霊, 死神

320 :
For 愛 = 1 To 10

321 :
>>319
うちの新人が最初に書いてきたコードがそれだったわ (実話
もちろん熟語の意味と変数の用途は無関係で、厨二ワードを思いつきで適当に並べただけ

322 :
>>311
初心者なら具体的な処理を抽象化していく
ボトムアップのやり方が分かりやすいと思う
たとえばかけ算の九九を求める関数に
引数でXを渡してXxX(12×12など)を
求める関数に抽象化すると使い道が広がる
あるいは5行6列目のセルを処理する関数を
X行Y列目を処理するように拡張するだとか
関数の引数は数学の変数のように考える

そして関数(やクラス)を自作する時のポイントは
なるべく関数を小分けにして組み合わせて使うこと
関数が大きくなると理解するのも難しくなるから
印刷やシートのコピーとか別の処理を
ひとつの関数で全部やろうとしないで
別々の関数に書いておく
それで呼び出し元の関数から
実行する関数をIF文で切り替えたりする
Excel VBAに限らずプログラミングの定石

323 :
個人的な意見だけど
変数を日本語にする事の欠点は、目立ちすぎて、他が見にくくなる事だと思う
ループカウンタの様な頻出する変数には、制御構造が見にくくなるので避けるべき
ルーチンの目的的なものとか、あまり使わないような変数については、場合によっては推奨

324 :
いいたいことはわかる
なでしこみたいに構造もそうなってれば、比較して自然に見えるしね
まあでも英語で慣れちゃってると、気になっちゃうから可読性低いと評価してしまうわ

325 :
>>303
絶対に止めた方が良い。
今、他人のそういうコードで四苦八苦してる。
しかもプロシージャも日本語だから
If 測定結果 Then
などとあって、"測定結果"が変数なのかBooleanを返すプロシージャなのかすら直ぐには分からない。

326 :
それはエーゴでもかわらなくなくね?

327 :
>>32
「定義」ですぐわかる

328 :
325の間違い

329 :
がっつり英語だと、こんどは辞書を引く作業が待ってることもある
発音がわからないと会話で困るし

330 :
特定の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に詳しい人、よろしくお願いします。

331 :
grep なら一行でできるのに VBA でやらないといけないのか

332 :
人に送ったら日本語フォントない海外PCで全く動かなくなったりしたな

333 :
>>330
参考リンク先のどのプログラムを試して、どの行でどんなエラーが出たか書いて
エラーが出たままでCtrl+Cを押せば、エラーメッセージがクリップボードに入るから、それをコピペして
あと、目的のWEBサイトの文字コードはちゃんと確認した?

334 :
>>331
まあ wget | nkf | grep のが簡単かもね

335 :
>>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

336 :
>>326
確かに。
でも日本語フィールドが多いSQL文の中で、一部の変数も日本語だったりするのとか、変数と気付かなかったりするのもあるし、最悪だよ。

337 :
かわらなくね?かわらなくなくね?

338 :
>>325
なんの測定なのか知らんけど測定結果がBooleanな時点で知能の足らない職場と言うことがわかる
コードレビューなんてしたこと無いだろ

339 :
辞書で調べても馴染みのない単語でかえってわかりにくくて結局日本語にしてみたりね

340 :
311です。

>>314,317,322
私がやろうとしていたことが、まず効率の悪いことだったんですね・・・
細かく分けて関数作って、それを組み合わせて作る方法を取りたいと思います。
(ただ、どこまで細かく分ければいいのか、まだ要領を掴んでおりませんが)
ありがとうございました。

341 :
初心者ですがご教授下さい
サンプルの工程能力で1個につき6項目の測定値をソフトがエクセルにデータ出力してくれるけど、日によっては23個だったり25個だったりしか測定できず
残りの記入方法は人によって様々で
ある人は測定値のバラつきに近い値をテンキーで手打ち
ある人はエクセルのrandbetween関数で
各項目の測定値のMAXとMINで乱数だしてそれをコピぺ
サンプル1 サンプル2  〜サンプル30
項目1
項目2
項目3
項目4
項目5
項目6
こんな並びで全項目測定後に出力されるから項目の途中で止まることはないです
「サンプル1〜30の間の項目1の行に空白があった場合、それより前(左)にある全ての測定値を参考に乱数でサンプル30の項目6まで埋める」
これは難易度かなり高いですか?

342 :
誤記というか間違えました
「サンプル1〜30の間の項目1の列、又はセルに空白があった場合、それより前(左)にある全ての測定値を参考に乱数でサンプル30の項目6まで埋める」
です
すみませんがどういったアプローチがあるのか
そもそもできるのかご教授下さい

343 :
>>342
それは多分難しくないと思うけど、読解力がなくてよく分からない。
サンプル的なものを挙げてもらえると分かりやすいかも。

344 :
>>340
>どこまで細かく分ければいいのか
基本的に処理は関数名に沿って分ける

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

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

面倒でも名前と処理を対応させた方が
後でメンテナンスしやすくなる

345 :
>>343
いや、俺の説明力がなくて、、
というか行列が逆でした
再度説明させてください

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

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

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

こんな感じです

346 :
「列、又はセルに空白があった場合、それより前(左)にある全ての測定値を参考に」というのは?

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

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

処理自体は難しくないとは思います。

347 :
>>346
その例でいうと、というか今の職場の手間になってる仕事がまさにその通りです
上の数値を元に残りの項目を誰かが埋めてます

どんなアプローチで行ったらよさそうかアドバイスいただませんか
Rnd関数Int関数、Loop、Offset
調べてもなかなかわからずです‥

348 :
>>345
数字を偽装するルールが人によって違うのはわかったけど、あなたはどういうルールでやりたいのか、もうちょっと厳密に書いて
「それまでの数値を参考に」という表現では曖昧すぎてプログラミングできない

例として、サンプルが7個しかなかった場合は、その7個の数字をどう使って30個に増やすのか?

349 :
>>348
数式と一覧を削りましたが普段はここの赤矢印に測定したデータのMax値とMin値を入れて
EXCELの関数でこのような数式で乱数を
出しています
数年前に自力で作ったけどもはや覚えていないレベルです
https://i.imgur.com/eglO3Ph.jpg

350 :
あとスクショ取りたいが故に行数の抜けやズレが、、、すみません

351 :
最低値+rnd×最大最低の差で乱数になるよ

352 :
とりあえず行と列の位置は>>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

353 :
>>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

354 :
>>353
神様過ぎびっくりです。
セルをクリックすると.0754322457888とか小数点が残ってるのですがこれを
EXCELのROUND関数みたいに四捨五入した状態でここに出力するようにできますか?
四捨五入で0.000の桁で出力できたらもう
職場の2人が失職してしまうレベルです

355 :
それくらい調べたんかな

356 :
>>354
Cells(行, 列) = Round(Rnd() * 幅 + 最小, 3)
実際、ごく簡単なマクロで仕事を効率化したおかげで毎年たくさんの失業者が出てるからほどほどにな
経営側でなければ、サビ残がなくなるぐらいのところでやめとけよ

357 :
>>356
神様ありがとう。涙出てきました。

358 :
>>357
またこの間の馬鹿か

359 :
無意味なデータ入力に数百万の人件費を払う会社か
すげーな
マクロで解決するより、その作業をなくす方法を真剣に考えた方がいいんじゃないか?

360 :
コード教えて君もいるし、PC博士気取れるから教えちゃうやつもいる

361 :
一時しのぎにはなっても長い目で見れば迷惑にしかならない

362 :
自力でマクロも書けんやつが作ったマクロで会社の経理やるなんてブラック企業しかない

363 :
4月は零細の新入社員が単純作業をマクロでどうにかしようとがんばる時期

364 :
そして保守できずに五月病で辞める

365 :
>>363
もともと99%はブラックだし
会社の規模とか無関係に

366 :
初歩的な質問なんですけど、ロック付きのブックを編集してSaveAsやcloseで保存したときにロックなしのブックにしたいんですが、どうやればできますか?

367 :
>>366
イベントプロシージャにロックを外す処理を書けばいい

368 :
ロックかけた人に外してもらう

369 :
俺に会社の経理やらせてくれたら自分の口座に自動で入金する処理入れるよ

370 :
画像フォルダのファイル名を取得→ファイル名と同じ文字列の入ったセルに画像を挿入→画像をセルのサイズに合わせるというサンプルコードを見つけたのですが
画像フォルダ内にファイル1〜5まであり、エクセル内にファイル1の文字列がない場合、「オブジェクト変数またはwithブロック変数が設定されていません。」のエラーが出ます
おそらくIFでその場合の処理を設定すればよいのではと思うのですが、変数の設定の仕方が分からないです
昨日今日始めたネット聞きかじりの知識で申し訳ございませんがアドバイス頂けないでしょうか

371 :
>>370
まずはうまく動かないコードをここに書いて

372 :
こらはまたコード出してくれるの待ってるクレクレ君

373 :
>>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

374 :
最終的には画像1-4はシート1、5はシート2みたいな感じに貼りたいんだがとりあえず画像1の文字列ないとエラー起こすのを直したいです

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

376 :
馬鹿がコピペで作ったものは使い物にならない

377 :
>>367
ありがとうございます。やってみます

378 :
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

379 :
>>369
自動なのにトロイ処理とはこれいかに!

380 :
>>342
「それより前(左)にある全ての測定値を参考に」が仕様としては曖昧模糊としてる気がする。

381 :
>>375
>>378
ありがとうございます、動かしながら理解していこうと思います

382 :
>>338
知らねーよ。
10年以上前の、他社から引き継いだ、正直全部書き直したいけど今動いてるからそっとしておいてるコードだよ。

383 :
指摘されたら他社とか言い出してて笑うわ

384 :
>>381
理解もできない代物を知らない誰かの作ったコードで動かそうという馬鹿

385 :
理解してないコードを使う無能に仕事やらせるとかやっぱブラックだったか

386 :
そもそもexcelVBAって素人が頑張って自動化してみましたってのが99%なんだから
そういうのをメンテしなきゃならない羽目になったって話だろ
プログラム板の中では異質なスレなんだと思う
コードレビューとか言ってるやつは確実にアスペ、そういう事情が想像出来る脳みそが生まれつき備わってない
相手するだけ無駄

387 :
他の誰かがってのは全部言い訳
仕事してメンテするなら自分自身が目の前の有りものを完全理解しないといけない
事情は関係ない
仕事としてやる以上自分の責任として取り組むべき
それを怠って開き直るのは無責任であり無能でありいつまでも何も成せない
趣味ならしらん

388 :
>>386
素人がつくろうが会社で使うんだろう

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

> 今動いてるからそっとしておいてるコードだよ。

言うことコロコロ変わりすぎw

390 :
散々ここで聞きまくって不快な思いをさせた物ですが完全に職場での運用に成功しました。
本当にみなさんのおかげというか頭良すぎですねここの人は…
フォルダ内にあるtxt全ての任意の列行を片っ端からエクセルにコピーする
空白の部分は乱数で処理
この辺は無知にとってはえげつないです。
提案で出そうと思ったらもっと大きな発表テーマで使うぞと言われました。
100のワークの測定データを作るのに2日かかってたのが5分でテンプレートに出力完了…

391 :
>>390
馬鹿はRよ

392 :
せっかくtxtという利用しやすいデータ形式なのに
わざわざxlsなんかにしちゃって
トドメとばかりにゴミデータをインプラント
面白い人だな

393 :
>>383
実際そうだし、というか、そんなの多いぞ。

394 :
>>386
素人じゃないと思うよ。
形の上では。
お客は自ら作るという会社では無い。
作ったのは請け負っている会社だよ。
コメントに会社名らしきものが書かれてるし。

395 :
>>389
あのね、客の要望は有るんだよ。
要望に答えるためには、今動いてるものも解析しないと答えられるわけが無い。
そのコ一ドが何やってるかわからずに機能追加なんてできるわけが無い。
というか、こんなのVBAに限らず開発やってる会社なら何処でもある話だけどな。
ここには開発専門で仕事したことのある奴が少ないということか。

396 :
他社が作ったコードを客の要望で機能追加
しかもVBA
そんなズタボロの状態で開発専門とか大丈夫かよw

397 :
>>394
その会社名らしきところに使用料とか払った?
それともその会社に無断で会社名入りのファイル使ってるの?

398 :
自分で書いたコードでも嫌です

399 :
>>396
今まで幾つかの開発会社で働いたが、どこでもある話。
VBAにも限らない。
まあ、日本語変数とか日本語関数はVBA以外では聞いたこと無いけどな。

前のコードが酷いので、書き直したらもっと酷くなったなんて、某SE本にも書いてあった。

400 :
>>397
プログラムは客のもんなので、そんな話にゃならねーよ。
普通はそうなる。
客のもんになってない例もあるかもしれんが見たこと無い。

401 :
>>397
これ、VBAの話ね。
コンパイルする言語の場合はそうでない例があったな。

402 :
>>400
> プログラムは客のもんなので

> 他社から引き継いだ
ボロ出し過ぎw

403 :
いい加減、他人の宿題とか仕事とかに安易に回答与えるのやめたほうが
いいんじゃないかと。

404 :
大手から零細まで、色々なところで仕事してきたけど、会社によっては日本語の関数とか変数は別に珍しくなかったな

405 :
現実問題として、VBAで複雑なマクロを書くと重くて動かないと思うんだけどな
それでも我慢して使っているのかな?

406 :
Excelでポリゴンゲー作るとか、
相当極端なことをしない限り大丈夫。

407 :
複雑な処理だからって重くなることはないだろ
重い処理をするから重くなるのであって

408 :
>>402
お前、事務員だろ。
自分のボロに気付いて無いw
開発会社で働いたことある奴ならすぐわかる。

409 :
>>405
スキルの低い奴はそうなる。
もちろんVBAは遅いけど、VBAで実施するようなことで、どうしても遅くなると想定されるような処理は殆ど無い。
VBAで実施するようなことじゃなければ別だが、そういう話はあまりない。

410 :
>>404
話には聞いたことがあるが、自分が目の当たりにしたのは今回が初めてだ。

411 :
関数名だけ日本語ってルールにしてるところは見たことがある
意外と見づらくなかった

412 :
>>408
> 開発会社で働いたことある奴ならすぐわかる。
なら詳しく説明してみなよ
客のものを勝手に引き継ぐとか犯罪だぞw

413 :
>>411
まあ、読むのは慣れだと思う
慣れればそんなに苦じゃないし意味不明な英訳調の関数名や変数名よりマシ
ただ入力がかなり面倒

414 :
>>412
???
日本語が理解出来ない人?

客が依頼していた開発会社を変えただけのことだろ。
10年前依頼されてた開発会社のコメントがソースにあったが、プログラムは客のもんだ。
今、依頼されてるうちの会社がどうして10年前に依頼されてた会社の了解を取る必要がある?

415 :
>>412
というかね、こんなの普通によくあることだぞ。
別会社のコメントなんて何度も見たことある。

開発会社で働いたことあれば、そんな所に違和感なんて感じないだろ。

416 :
ソースコードの著作権をどっちがもつかは契約によるぞ
著作権をシステム会社側がもってるのに違う会社に開示したらそれは違法行為
知らずにやってるってのは昔はよく聞いた

10年前に依頼されてた会社の了解を取る必要はないが
普通はソース開示受けるなら開示元に著作権の確認はする

417 :
>>416
そんなの常識だろ。
だが、そこまで分かってるなら結論も容易に想定出来ると思うんだが。

VBAの開発ではExcelならブックそのものにソースが付いてくるし、実質派遣のような形態も多い。
つまり、契約上客のもんになってると想定するのが普通。

418 :
ここで言ってる想定ってお前のことだからな。
そんな想定も出来ずにいちゃもん付ける奴に言ってる。

419 :
>>414-415
> 客が依頼していた開発会社を変えただけのことだろ。
それ引き継ぐなんて言わんだろ
お前の会社から見たら単に客から改修を依頼されただけ
元のソースを別会社が作ってたか客が作ってたかなんて関係ないし
> 日本語が理解出来ない人?
お前の日本語がおかしいだけ
まあどんどん辻褄合わなくなってるだけとも言うがw

420 :
>>419
???
言うだろw
日本語を理解出来なかった言い訳が見苦しいw

421 :
>>419
日本語がおかしいというより、自分の脳内理解が共通認識だって信じて疑わない人だったようだぞ
かまった俺も悪かったが、俺は今後スルーするからお前もそうしろ

422 :
スレ違いになってきてるとは思うが。
最初のほうの386には
「そもそもexcelVBAって素人が頑張って自動化してみましたってのが99%なんだから
そういうのをメンテしなきゃならない羽目になったって話だろ」
って書いてあって、
ここ数レスはプログラム(開発資産)として引き継いだ中のVBAソースコードに焦点が当たってるように見える
まず引き受けた方がプロ(仕事としてVBAをやる)として、
前者ならドキュメントとかなくても(時間さえあれば)改修も簡単だろう。
後者ならドキュメント残してないやつ、もしくはそれを知らずにスキルもなく引き受けたやつが悪い。
まあこんな、前提とゴールをあやふやにして不毛で幼稚な言い合いをしたいなら別にスレを立ててろ

423 :
>>420
> 言うだろw
言うのはお前だけなw

>>421
知ったかが盛って語ったら引っ込みつかなくなったパターンだと思う

424 :
>>422
開発やったこと無い奴だから簡単等と言えるw
確かにドキュメントは無いが、あっても他人のコード読むのは大変だぞ。

425 :
>>423
引き継ぎって言葉分かってる?
それに、想像力があれば一番最初の段階で想定できるような話なんだがw

426 :
引き継ぎ 開発でクグったら最初の3つとも他社からの引き継ぎのことが書いてあったわw

開発会社じゃ当たり前のことなんだけどなw

427 :
でもググったURL

428 :
は出せないw

429 :
>>422
ああ、素人のコードを引き継いだとしたらの話か。
まあ、素人の短い簡単なコードならその通りだな。
まあ、>>394に書いた通り、形の上では開発会社らしき所のコードだし、コード量も多いからねえ。
VBAはそういうの多いんだよ。
形では仕事で受けてても素人のコードとか。

430 :
>>427
出しても構わんがw
マナー的に出してないだけでw

というか、お前もググって見てから言えよ。
事務員の上にググることさえ出来ないのかよw

431 :
出しても構わんけど出せない
うんうん、そうだろねw

432 :
>>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/

433 :
>>423
な、お前のような素人だけだよw
客が依頼してた会社を変えて、引き受けたのを引き継ぎとは言わないのはwww

434 :
必死にググったのは褒めてやるよw
でも、それ運用とか保守の話だろ
そりゃそう言うのは連続してるから引き継ぎって言うだろうけど、10年前の他社のコードの改修を引き継ぎとは言わんわな

435 :
微妙にニュアンスがずれてる気がするけど
わざと?

436 :
他でやれ

437 :
>>434
必死?
一発で出たぞwww
またボロが出る。
開発は作って終わりだと思っているのか?
普通は保守へと継続していくもんなんだが。
何も知らんのなw

438 :
>>410
ブラック・ショールズ式ってのが金融の世界にあるんだが、これをググって
初めて日本語の変数見て目が点になったw

439 :
質問していいのか?
グラフの近似式をセルにコピペするマクロだ。

440 :
あらら、他社のコードの保守まで受託してるって話にするの?
そういうケースだと普通はドキュメントも貰ってるはずだけどろくなドキュメントがないって話かな
そんなハイリスキーな受託して>>325みたいな愚痴こぼしてるなら知能の足りない会社と言われてもしょうがないじゃん

まともな会社なら受ける時に調査費用と時間をもらってドキュメントを起こし直す
でないと保守できないから
>>437は保守が何をするのかすらわかってなさそうw

441 :
>>439
コピペは難しい、普通にセルに直接ぶち込め
って書かれてるぞ
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14139043119

442 :
近似式をテキストとしてセルに貼るとこまでできたが、そのテキストから係数を得る方法はないですか

443 :
近似式をセルに落とし、計算する作業が大量のあるためです

444 :
>>440
プw
引き継ぎって知らんの?
いい加減、恥を晒すだけだぞw
というか、VBA案件だけの話だと思ってる?
爆笑もんだw

1つの客から1つの案件だけのわけね―だろ。
寧ろVBAの開発はメインじゃね―ぞ。
DBにAccessなんて普通は無いんだ。
バックエンドとか知らんの?

445 :
>>440
あと、知らんのだろうけど、ドキュメント類についてはVBAの場合はそうならないことが多いんだよ。

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

これはVBA案件の特殊性だろうな。
VBAが言語として糞呼ばわりされる原因の1つだろう。

446 :
もうウザイから消えろ

447 :
>>446
無理にこのスレに居なくてもいいんですよ

448 :
>>442
近似式a x + bからa とか bを切り出すってこと?
VBA使わずともエクセル関数で出来るでしょ
RIGHT、LEFT、MIDとか駆使しろ

449 :
>>444-445
今度はAccessガーとか言い出したのか
まあ言い出すのがAccess止まりなのが物悲しいけどねw
ドキュメントも作らずに何を保守するつもりなんだよ
言われたらその場であたふた調べてやっつけ仕事でテキトーに改修するのか?
そう言うクズ会社なのはよくわかったよ

450 :
自宅待機でストレス溜まってんだろなー

451 :
>>449
バーカw
今度はじゃね―よw
ある特定の案件だけと考えるバカに教えてやってるだけ。
客からの要望はたくさんある。
VBAなんてたくさんある中のごく一部なのがむしろ普通。
ドキュメント作らずってw
それは最初に受けた会社に言えよwww
現実を知らないニートにゃ分からないんだろうなw

452 :
日本語が通じないんだよな。
ドキュメント残してないのがコッチにされてる。

453 :
トヨタ並に名前が知られた客から提示されたのがプログラム本体だけで、それ以外何もありませんってことだって有るんだけどな。
結構昔の話だが。

454 :
連投バカは日本語が理解できないらしい…
まあ無職の脳内妄想の限界かなw
> まともな会社なら受ける時に調査費用と時間をもらってドキュメントを起こし直す

455 :
長文質問失礼いたします。
VBAを用いたAsc?コード129〜159、224〜252範囲の文字変換が上手くいきません。
環境:Windows10Pro excel2007 VB6.5
上記以外のアスキーコードでは、
?[Chrを用いた、Asc?コード→文字への変換] → ?[Ascを用いた、文字→Asc?コードへの変換]
の順序で2回変換すると最初と最後でコードが一致します。
しかし、129〜159、224〜252の範囲だと、
?変換では「・」、?変換では「-32443」が出力されます。(129〜159、224〜252の範囲ですべて同じ結果)
変換に適した別のコマンドがある、そもそもこのVerでは動作しない等、アドバイスをよろしくお願いいたします。
※大元の目的としては、オシロスコープから取り込んだ画像バイナリデータを画像データにするため、Asc?コード→文字への変換を行おうとしています。

456 :
文字として表示って、その範囲をどんな文字で表示したいんだ?
画像バイナリデータを画像データって、普通画像データはバイナリなんだが
文字として表示しないならとりあえずAscBとChrB使えば一致するんじゃね

457 :
>>455
アスキーはAsc?じゃなくてAsciiな
あと、画像データはバイナリなのに、どうして文字に変換するのかもわからない
方法が間違ってないとして、どこかでデータが化けてる可能性があるけど、どこが悪いのかその文章だけではわからない
まずは変数の型をチェックかな

458 :
-32443は文字化けした時に表示される文字のコードだから、根本的にデータの受け渡し方法を間違えてる

459 :
覚え初めてまだ三日だけどなかなかエクセル関数のように簡単にはいかんもんだね…
流石入門といえどプログラミング、敷居が高い
(A1:B1)から羅列されてる数字を(C1:D1)に
コピーしてABS関数で絶対数に変換
こんな事すらなかなか難しい

460 :
VBAは覚えることが多いだけで
やってることは関数と大差ない

461 :
3日?勉強中とかいって1ヶ月近く経ってない?

462 :
>>456 >>457
長文の返答失礼します。
>>文字として表示って、その範囲をどんな文字で表示したいんだ?
10進数数字をASCii文字に変換しようとしています。
(66→B 77→M)
>>画像バイナリデータを画像データって、普通画像データはバイナリなんだが
呼び方が不適切だったかもしれません
?画像データ:BM>・・・(Bitmapファイルをテキスト形式で表示したもの)
?画像バイナリデータ:66 77 62 150・・・(上記を10進数変更したもの。オシロスコープからはこの形式でデータを取り込んでいる)
>>あと、画像データはバイナリなのに、どうして文字に変換するのかもわからない
取り込んだ?データを?データ(文字列)に変更、
得られた文字列をファイルに入力し、拡張子を変更して画像ファイルを作成する目的です。
>>文字として表示しないならとりあえずAscBとChrB使えば一致するんじゃね
Chr、ChrB、ChrWでそれぞれ確認したところ、
・Chr
Chr→Asc変換前後で一部データ一致せず。正規データとは一部不一致あり。
・ChrB
ChrB→AscB変換前後で全データ一致。正規データとはほとんど不一致。
・ChrW
ChrW→AscW変換前後で全データ一致。正規データとは一部不一致あり(Chrと正規データの不一致位置と同じ位置)。
※オシロの外付けFDで取り込んだ画像データを正規データ呼んでいます。
※ChrとChrWでは129〜159、224〜252の範囲のデータのみが正規データと不一致だったが、ChrBでは確認した範囲ではすべてのデータが不一致
>>まずは変数の型をチェックかな
オシロスコープから取り込んだ?データは配列のByte型、Chrで文字列に変換した?データはString型です。

463 :
>>461
やったというより訳も分からずここの人にただ完成させてもらっただけだから俺の本当のVBAの勉強はこれからという感じで
おかげで肩の荷が降りて基礎から学べる幸運な情況ですね
変数の宣言やデータ型は何となく理解して
こっから仕事で簡単に自分でやってけそうな関数をこなせるようにしていきたい
ここの列が空白になるまで指定の列に四捨五入した数値を貼り付け
とか絶対数を貼り付け
あとは数値のバラし
とか覚えていって自職場で簡単なVBAのテンプレート作って行けたらいいなと

464 :
>>458
アドバイスありがとうございます。
大部分(129〜159、224〜252以外)の文字変換は問題なかったですが、今一度変換方法を再確認いたします。

465 :
>>462
もしかして、それって何も変換せずにそのままバイナリファイルに書き出せばいいのでは?
テキストファイルとバイナリファイルの違いは、出力方法はわかってる?

466 :
>>462
だから例えば130や250という数値をどういう文字にしたいんだ?

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

というか、たんにいわゆる.BMPのファイル作りたいって話じゃないのか
お前がいってるBitmapファイルってどんなんだよ
なんにせよ出力したいデータフォーマットちゃんと確認しろ

467 :
なぜ次から次へと馬鹿が出てくるのか

468 :
>>467
外出を自粛したり自宅で仕事する人が増えたから
みんな体力とヒマを持て余してる

469 :
>>462
Asc?とかASCiiとか、なんでいちいち気持ち悪い書き方をするのか
こんなん入力するのも面倒だろうに
正式には全部大文字でASCII、許容範囲で小文字ascii、賛否ありそうだけど頭だけ大文字Asciiもギリ許せる、どれかにしてくれ
1文字たりとも間違いを許さない厳密さがないとプログラミングは無理だぞ

470 :
とにかく、説明がへたくそすぎて、何が悪いのかさっぱりわからん
動かない今のプログラムをここにそのまま書いてくれ
たぶんそれ見た方が早い
あとオシロスコープの機種名も

471 :
勉強しても仕事より辛い

472 :
たぶん、こうだな
Open "オシロ画面.bmp" For Binary Access Write As #1 'ファイル名を指定
Put #1, , 変数名 'バイト配列をそのまま全部出力
Close #1 '終了

473 :2020/04/20
>>471
就職先間違えたんじゃね

UNIXプログラミング質問すれ Part10
Io Language
盗用したコードどれくらい書換えれば合法になるの?
攻守最強のプログラミング言語は?
C言語なら俺に聞け 153
関数型言語一般
【Delphi】Embarcaderoオッチャ その34【C++ビルダ】
おまいらはディープラーニングの検定試験受けるの?
【GNU】スクリプト言語 Guile【scheme】
サウンドプログラミング5
--------------------
【悲報】 トネガワ 2クール まだ20話以上ある模様 [541495517]
ランスマ 〜街の風になれ〜16
中野区のラーメン屋57
Nosub【少女祈祷中】Part19
オレの灰皿+オレのライターが美しすぎる件。
【家電】ドン・キホーテ、21.5型フルHD液晶一体型PC「MONIPA」発売 お値段2万9800円(税抜)
転売用にドンキで1000点以上窃盗、韓国汚物2匹逮捕
バスケットボール総合スレ
★つちのこまにあ的気象観測17@なんか知らんけど?
☆外国人と結婚すっかなあ・・・
芸能界・有名人をプロレス風に語ろうZE!Part21
最近、テレビがつまらないと思う40代☆6
【偽装請負】カーネルソフト【KSE】
ロックフィッシュ総合 Part.6
【6670】MCJ★154【訴訟和解8/ギディオン爆誕37/フッ化水素34/amd33/武漢肺炎7】4/27〜
【村山談話】 「日本は歴史に学び平和貢献を」〜村山元首相「戦後五十年の節目に談話を発表できて良かった」[08/16]
高校長距離選手の進路433【ワッチョイあり】
■日本全国の郵便局で人手不足・求人人気がない!■
モーターバイクトライアル6
【鉄道】リニア問題 国交省局長、JRに姿勢改善求める「説明責任を」
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼