Excel VBA 質問スレ Part65
レス数が1000を超えています。これ以上書き込みはできません。
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part64
https://mevius.5ch.net/test/read.cgi/tech/1575297834/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured >>1乙
>全スレ998
挿入か貼り付けかはっきりしてくれ 行をコピーして挿入操作
マクロ記録したら、Selection.Copy Selection.iIsert Shift:=xlDown が出てきたけど普通に再生できたぞ 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& プラウザのウィンドウサイズを大きくした後で画面キャプチャしたら
満足の行く画質になりました。
>>5の質問は撤回します。 >>4
まじすか
コピー元が別ブックだったのでそのせいかも リボンを自動的に非表示にする設定だととクイックアクセスに登録したものも含めてコマンドがすべて隠れてしまうんだけど
特定のコマンドのみ表示させておく方法はないかな?
マクロとして登録させて画像にマクロを登録しようとしたけど動かない。 >>9
うちのExcel2016だと隠れないけど、それ以降だと違うのかな
リボンの下に表示offでもだめなら
フォーム作って、UserForm.ShowModal=False という手もあるよ >>10
>>9
UserForm.ShowModal=False はどういう方法? >>11
自作フォームをカスタマイズメニューに見立てて自作のマクロなどを呼び出す >>12
マクロを呼び出すのは簡単なんだけど、各コマンド(既存の機能)をよびだすのかできない
たとえば描写とかペンとか消しゴム機能とか 既存の機能が必要ならリボンを非表示にしなきゃ良いんじゃね >>15
ショートカットキーを設定してってことかな? csvを読む場合で、見出し行とデータ行が文字と数値で形式が違う場合とかどう処理しますか? >>17
パワークエリで読み込んで任意のデータ型に変換する >>17
CSVを読み込む場合にブックとして読み込むことはまず無い。
というか、まずテキストとして読み込む。
処理も何も、全て自由に出来るぞ。 >>17
全部文字として読み込む。コードで数値として処理したいならcintやcdblでキャストすればいい。因みにワークシート関数にはNumberValueってのがある。 あれなんとかならんかな。
NULLがあるとコケるから、
いちいちIIF(A IS NOT NULL, CINT(A))ってやらなきゃいけないの。 VBA で、セルの指定しても行の指定が無効になってて、必ず1行目に表示されてしまいます。
何が原因でしょうかね?
教えてください。 ここだけじゃなく5chはどこも似たり寄ったりです
貴方が来るような場所じゃありません >>25
霊性?
馬鹿確定
原因としては正しかっただろうが >>22
ソースコード書けないの?
君書いたのが本当にセルの指定をしてると信じる人がいるとでも? よろしくお願いします。
数百行あるシートで、上から順に一行ずつ以下の操作を行いたいです。
(1) C列の文章の中に、「一言コメント:」という文字が入っていれば2へ。なければ終わり、次の行へ
(2) 「一言コメント:」とそれ以下の文字列をC列の値から削除し、E列の、元々の値(文字列)の前に貼りつけ
(3) E列の文字列の中から「「一言コメント:」という文字列を削除
以上です。
まず、(1)の検索がうまくいかず、(2)の文字列取得も、一文字ずつ数えてカウントし、あらためて「終わりから○文字」みたいな
やりかたをするしか方法が浮かびません。
たぶん、上級者ならもっとシンプルな書き方ができるのではないかと思い質問させていただきました。
どのように書けばよいでしょうか?よろしくお願いいたします。 For文をRowCntって変数で回していると仮定して
If Cells(RowCnt, 3).Value Like “*一言コメント:*″ Then
で引っかけるとか? >>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 >>15
どんな機能でもショートカットキー設定できるの? >>29
VBAでないとだめなわけじゃないならExcel関数でやればいいと思う >>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
初心者も上級者もキチガイも見てる
みんなが毎日見てるわけじゃないから、タイミングが悪いと質問に答えてもらえないこともある FileSystemObjectでFilesのコレクションょ取得したあと
それぞれにアクセスするにはどうしますか?
Files(1), Files(2)のようにするとエラーが出てエラいこっちゃとなります。
For each文ならできるのですがそこまでするほどのことではない時には? 暇だし、見てみた
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とか分かりやすいがね itemでナンバリングされていないんじゃないか?
だからitem(1)やitem(2)で取得できないのでは。
それゃファイル名を()の中に書けば取得はできるけど。 「そこまでする」の考え方がまずおかしい
中身がたとえ1個でも2個でも普通はコレクションにはFor Eachを使うもんだぞ >>45-46
このハゲー!
違うだろ!
最初にfor eachはやらないと言った。
コレクションの代表ということで任意の1個だけを選んでそのプロパティ等を調べる、
ということはプログラミング経験がある程度あればそういう状況に遭遇することはたまによくある。 fsoのfilesコレクションには通常のコレクションみたいにインデックス指定が出来ないのよね
countとitem(key)プロパティしかない
ファイルシステムの違いとか、歴史的経緯からかはしらんけど
だから基本for eachで他の形にする >>48
そんなことはとおの昔に知ってるから
ここで質問をしたのだ。 インデックスが使いたいなら自分で配列でも作り直せばいいのに OpenDocumentスプレッドシートのデータをADOで取得する方法ある?
EXCELに変換しろってのは無しで。 ファイル入出力に使うopenやinputが何者か(関数?メソッド?など)知りたいです
これらの機能はなぜオブジェクトブラウザに乗っていないのでしょうか
マイクロソフトのウェブヘルプにはステートメントとして乗っているようですが
ステートメントというのは関数やメソッドなどの分類ではないですよね?
ご教示お願いします。 >>59
ステートメントというのは関数の祖先にあたる概念
コンピューター言語が発明された初期からある命令文の分類の一つ VBAを覚えようとしてる初心者以前だが
まず何となくルールから覚えてる
=は同じじゃなくて←の意味ぐらいにとらえておく
あとはコードというか使いそうな単語を少しずつ
msgboxとかRangeとかactivecellとか
でもとっかかりがわからんわ
難しすぎですな… 覚えるのは結構だけど、普段やってる作業をVBAで再現するとこから始めると飽きずにやれるんじゃ
コピペ作業、シートコピー、ボタンで特定の計算とかね
だんだんCSV読みたくなったりして高速化したくなったりして、そうやって覚えていく ユーザーフォーム上にあるボタン1を押すとボタン1を非表示にしてフォームのキャプチャを取得。
その後ボタン1を再び表示して終了。
みたいなものを作りたいのですが
SendkeyでAlt+Printscreenを送っても
素の状態ではボタン1が残った状態のものがキャプチャされ、
Waitをかけると今度は画面全体のキャプチャになってしまいます。
フォームをダイレクトに画像ファイルにする、とかでも良いのですが調べても中々応えに辿り着けなかったので皆様のお知恵をお借りしたいです。
何か良い手はないでしょうか。 以下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 すみません。
情報の伝達に齟齬がありました。
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 使えるけどwindowsと全く同じように動くかまでは知らん 新しい天啓が下った。私は馬鹿ですらなく、場であり、これが私の仕える神のような気がしたが違ったような気がした。
忠実に表現したらこうなった、つまりそういうことなんだろう。 WEBクエリはhttpsだと遅いすか?
そうなったサイトが急に読み込み遅くなったんすけど 初心者はまずここ見とけみたいなサイトとかYouTubeの動画ありますか?
宣伝込みでも俺が踏むだけなので良かったら教えて欲しいです
本当に何から見てけばいいのかわからない
asとかretとか当たり前に出られてもわからない… >>73
動画でプログラミングを覚えるのはとても難しい
エクセルの使い方や開発環境の整備とかなら分かるけど
言語を覚えるのは本を読んでコードを書く方が早いだろう >>75
>>76
ありがとう
とりあえず、マクロからあるURLやoffice系のソフトを呼び出すコードをネットから丸パクリしてみたんだけど結局これが良いのか悪いのかそもそもルールすらあまりわかってない
サイトや本で必死に勉強しますわ
https://i.imgur.com/Llw26vN.jpg
https://i.imgur.com/CEIjgGb.jpg 図形のグループ化についてです。
ショート上に円が無数にあってその円の中にテキストがあります。
これを円と円の中のテキストをそれぞれグループ化してShapeの名前をテキスト名にするにはどうしたら出来ますか? >>80
グループ化はGroupメソッドを使う
For Eachを使えば図形がいくつあっても関係なく同じようにできる 図形をVBAで複雑にいじろうとすると悲しみしか生まなさそう Worksheets("min").Range(Cells(N, 2), Cells(N, 100)) = "999"
これで複数セルに一括入力したいのですが
アプリケーション定義またはオブジェクト定義のエラーです
と出ます。
何がいけないのでしょうか? With Worksheets("min")
.Range(.Cells(1, 1), .Cells(20, 2)) = "999"
End With
できました^^ありがとう 検索して違うシートから値を 持ってくるマクロで持ってくる値が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
If wS1.Cells(c.Row, "Z").value < 0 Thenでもエラーが出ます
With Worksheets("data")が邪魔をしてるとかですか? >>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プロパティで呼んだ方がいい 範囲に名前はなぁ・・。
上手く使いこなせればいいが、
みんなで共有するファイルに使うと、
知らない間に#REFだらけになってるwwww >>71
レスありがと
標準モジュールに書いてない。
しばらく、やってなかったんで忘れていた。
すみません >>98
異常時に例外が投げられるように設計するのは普通だと思うんだが・・・ >>100
名前を付けるのは、コードと関係無い所で実装されるので個人的には絶対使わない。
というか、Cellsを使うよ。
2次元配列的にもぴったり来るし。
寧ろ、Rangeの方が使わない。
尤も、Cellsでも列を文字で指定するのはやらない。
AF列が何列目か分からないって?
イミディエイトで?Range("AF1").Columnとでも入れてみろ。 >>101
で、コメントで何列かとか、項目名とか書くわけ? >>96
>>101
名前を付ける派
可読性が高い方が良い
VBAは見にくいコードが多い >>101
名前定義が弄られるってことはロックしないで使うんでしょ
猶更、セル挿入なりで意図した場所とズレてても気づかずに成功し続ける方が危険だと思うんだが
で、セルを挿入したい時も一個一個数値をずらしていくの?
ワークシートの見た目が二次元配列である事とコード内容を一致させる必要性も感じないんだが、
もしかしてハードコーディングしてるのか?
イミディエイトウインドウで毎回インデックスを調べろっていうは面白すぎるから止めて欲しい Shapeの当たり判定の計算方法を教えて下さい。
基準の円のShapeにTextBoxが当ってたらTrue、当たって無ければFalse
円は選択時の□の面積じゃなく実際の円の大きさ。TextBoxは選択時の□の大きさ。 >>105
表示位置とサイズから比較したらいいんじゃね 当たり判定だからゲームじゃないの?
Corei世代でも60fpsでないから使いたくないけど。 >>105
専用の関数などは用意されてないので、TextBoxの頂点と円の座標を比較したり、円の中心からの距離を三角関数で計算して調べるしかない VBAであえてゲーム作ったりするのは
芸ではあるけど開発効率的に筋は悪いよね
グラフィックにこだわるなら別言語推奨 >>102
普通は定数で行、列を宣言するわな。
>>103
見にくいコードは書いてる奴の力量次第だろ。
>>104
ロックはしない。
そんなもんは解除されるかもしれんし、当てにしない。
というか、作ってるもの次第だね。
ワークシートの見た目と二次元配列を一致させるとか笑わせるなあ。
少し慣れた奴なら列も数値で扱うのがぴったり来るんだよ。
何故なら、最初から二次元配列的に考えるから。
VBE上に自作のメニュ―作って、入力するだけで列名←→列数はわかるげとな。
作る力量無い奴はイミディエイトで調べりゃ良いだろ。
VBEのCommandBerでイベント扱うのはクラスが必要だし、上級者の領分にはなるかもな。
VBE弄るVBAは会社じゃ使わないから通常のCommandBarでメニュー作ってやっても良いんじゃね?
どっちにしても時間は考えることに使ってるんで、毎回イミディエイトで調べても大した話じゃね―んだわ。 >>63
今の若いヤツらはそういう説明じゃ200%挫折する。普段の業務を自動化っていう感覚がわからないそう。やっぱスマホタブレット世代はPC=ワープロにしか思えんのかもな。 >>111
ロック外されたくないならパスワード付ければいいじゃん >>111
> VBE上に自作のメニュ―作って、入力するだけで列名←→列数はわかるげとな。
まさか自慢じゃないよね?w
傍から見てたら馬鹿なことしてるなとしか思えんし 共有編集可能にしたら更新は5分間隔だけどVBAとかで1分以内にできないかな?複数のパソコンで映してる同じエクセルファイルの内容を別のパソコンから共有編集で編集して保存したら1分以内に複数のパソコンにも表示を反映させたい。 あ、どうせ、コピーしても意味ねぇよ。記憶してるのPCじゃねぇから。 考えまとめるためにPC使ってるだけ、ただそれだけなんだよ。 >>116
君にできないからと言って、そんなもんが自慢になると思うかね? >>120
日本語の理解力がないのかな?
自慢にもならないことをいちいち書くとかバカじゃね?
って言う事な >>121
wS1.Cells(c.Row, "Z").value < 0
そもそもこれ必要? いや、いらないのはそっちじゃなくて、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 に代入してなかったってオチじゃないよね >>122
悔しいからって一々反応しなくて良いんだぞwww どこで受けたストレスをここで発散してるんだろう・・・ ここの人等は本当にきついね
一部だけかもしれんけど
他スレ建ててもどうせそこにやってくるし困ったもんだ いいから質問しろよ
俺が優越感感じられるように割と簡単なやつな 天才な人、教えて下さい。
フォルダAの中にフォルダa1があってこの中にxxx.zipがあるとします。
このxxx.zipを直接クリックしたりしないで解凍するプログラムを書くのはVBAで可能でしょうか? たまたま知ってたけど天才じゃないから教えられない
残念です
無念です 俺も天才じゃないんだわ
いるんか?このスレに、天才が >>135
「powershell zip 解凍」で検索! zipをxlsxにすれば、VBAを使わなくても開くだけで解凍できる。どこに解凍されるかは知らんが。 >>126
zip解凍ぐらい大して難しく無いんだから答えてあげたら? >>143
既に>>139で答えられてるだろ
スレの流れも追えないのか?w >>141
VBA 共有編集でググレば参考になる所が出てくる。 そういやxlsxがそもそもzipファイルなんだよな そーなのか
道理で大昔作ったフォーマットを作り直してみたら容量が半分程度だったんだ
効率的なコード書けるようになった俺スゲーって訳じゃなく、エクセルさんが凄かったのね 拡張子zipにして展開すると画像ファイル取り出せるしな ネットでこんな素晴らしい物を見つけたんだけれども、これがデータ量が多いと結構時間掛かるんだけど、高速で図形として書き出す方法って他にありませんか?
http://izawa-web.com/excelbcad/dxfreader.html >>156
CADアプリで画像にでも変換してシートに貼り付けた方が早くて綺麗
オートシェイプに変換すると重くなるし比率が狂うし、メリットがなさすぎる >>157
貼って終わりならそれでもいいんですが、数あるCADデータの中から指定のデータを呼び出してエクセルに貼り付けて線の色とか文字を取得したいんですよね。 >>145
更新時間を短くする方法は載ってなかった あるマクロを開いた瞬間に自作したユーザーフォームが出るようにする
それと同時にエクセルファイルを選択できる ファイルを開くウィンドウが出るようにする
ド基礎以前だと思うのですがおしえていただきたく、、 >>160
Workbook_Open()
UserForm1.Show
Application.GetOpenFilename ド基礎以前発言がひっかかるな...
あるマクロが他人の作った編集できないマクロなら難しいね
パスワードクラックはNGで ド基礎以前のこともわからないやつに教えても理解できんだろう >>162
ありがとう、ネットで捜してコピペしながら頑張ってくわ
起動すると作ったユーザーフォームが開きつつ
ファイルからエクセルを選べるウィンドウを出す
↓
開いたエクセルにはBとCの2列目からずらーっと数字が並んでるからそれをあらかじめ自分のカスタマイズした散布図にする
(2列目から始まるが終わりはデータによって違う)
↓
ボタンによって2つの散布図に分けられる
がんばりやす >>162
そりゃ駄目だ。
モーダルとモードレスを調べよう。
モーダルでやりたかったらフォームのInitializeかActivateイベントだな。 >>159
AutoUpdateFrequencyプロパティじゃね?
ググっただけだけど。 >>170
それ、イミディエイトペインで試したけど、5未満はNGだよ
>>145の共有編集って、Excel2016で実装した、OneDriveとか使ってクラウドでやるやつだと思ったんだけど、違うのかな
×共有編集 ○共同編集 らしいけど 自動更新の間隔を短くするのが無理なら手動でできないのかな?
強制的に切断と接続を繰り返してみたらどうだろう >>172
ローカルのつもりだったんだけどそれなら共同編集になるのかな? セルA1とB1の数値が一致しない場合はC1を塗りつぶす、というのはできるのでしょうか? >>177
If A1 <> B1 Then [C1].Interior.Color = RGB(1, 234, 56) A行の値を見て、その値が1だったら、空白行を上に2つ入れたいのですが、できますか。 間違えた。
A列の値を見て、その値が1だったら、空白行を上に2つ入れたいのですが、できますか。 >>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 子が吐き出したcsvデータ(子の状況により1ファイル数行〜数百行程度のデータ00000000.csv〜FFFFFFFF.csv)を親で吸い上げて管理用に整理するマクロを作成しているのですが子のデータ数が多くなったせいか親の処理を実行中にExcelが落ちるようになりました。
現状では
Workbook.Open 00000001.csv
でファイルを開いてから配列に叩き込んで処理しているのですが、
他に何か開かずに直接配列に収納するとか別の開き方など良い手段はありますでしょうか。 >>186
その説明では落ちる原因がわからんので対処のしようがない
とりあえずテキストファイルとして開いてSplitで配列に入れるとか >>174
自動更新しても更新されない
強制的にはできないね >>174
最初、自前タイマーでの自動保存を提案しようと思ったけど、全ユーザーの同期とか排他処理とか必要になるからやめた
同時使用数にもよるけど、現状の5分ぐらいが実用限度だと思う
それでも問題があるから、MSも共有ブック機能を非推奨にしたんだろうしね >>186
まず落ちる原因の特定が必要
本当にデータ量が原因かどうか?
それでもし量の問題だとしたら
同時に必要なデータを見定める
たとえばA、B、Cのファイルを同時に開いてたが
じつはAとB、BとCで処理する工夫の余地があるとか
それでもアルゴリズムではどうにもならない量なら
SQLとかのデータベースに移行する https://oshiete.goo.ne.jp/qa/1972570.html
ActiveWorkbook.SaveAsにするとファイル名変えずに保存できる理由を教えてください
Copyした時点で別ブックが作られるんですか? マクロで作られた印刷ボタンを押すと両面印刷で出てくるからこれを片面印刷に統一したいんだけどどうしたらいいの? >>192
マクロを書き換える
印刷方法の変更はプリンターごとに違ってて、Excelのマクロの中でも一番面倒な部分だから、会社でわかってる人に聞くのが早い プリンタ登録を2つに増やして使い分けるのが簡単。
でもWin95のころはコピーするだけでプリンタ増やせたけど年々難しくなるよね 正直印刷は、機器変更、NW、印刷位置、紙質とかでトラブルが非常に多くなるから、
金、人命とか絶対にVBAで自動化しなければ行けない理由がない限り手動にするようにしたわ
印刷部分だけPDFにして置いておくとか マクロは印刷プロパティを出すところまで。
それ以上はトラブルの原因になるからやめとき そもそも紙にこだわるのが非効率で
電子化するのが本来の理想ではある プリンタのプロパティでプリンタの設定自体を片面印刷にしておくと片面印刷になりますか? >>186
CSVをWorkbook.Openで開くのが駄目。
OpenステートメントとかFileSystemObject使う方が良い。 >>197
そんなの職場や利用目的によりけりだから コントロールパネルからプリンタのプロパティで片面印刷に設定したんだけど片面印刷オンリーになりません
どうしたらいいですか? 特定の文字列のみ文字色を変えたいんだけど、
置換を使うと指定した文字列を含むセルに入力されている全ての文字の色が変わってしまう…
現状では数百数千セルある中から文字列を選択して文字色変更を繰り返す、という辛い作業を続けているのですが
この様に、指定した文字列だけの色を変更って出来ませんか? >>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 >>205
何か少し違う気がする。
rの中で対象文字列が1回しか変わらないんじゃね?
s=instr(s+1,r.Value,対象文字列)でsが0になるまでループかな? >>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) Windows10になってから、アプリごとに印刷設定を覚えるようになってややこしくなった
以前はプリンタのプロパティからデフォルト状態を決め打ちできたのに >>206
その辺は仕様がはっきりしないから何とも言えんし
そもそも丸投げを受けたつもりはない
s+1だとaaaaaにたいしてaa指定したら5文字全部色変わるけどそれが良いのかどうかわからんだろ 4文字目から3文字赤に変えたマクロの記録
ActiveCell.Characters(Start:=4, Length:=3).Font.ColorIndex = 3 まさかシート毎に印刷の画面から片面印刷を選ばなきゃ両面印刷をされるなんて知らなかったわ プリンター関係の情報はシートごとになってるから。
手動ですべてのシートを両面印刷にする方法はあるけど。 シート全選択してプリンタ設定変更してからやればいい シート全選択してプリンター設定してもダメなんですよね。 dwgファイルをどうにかしてEXCELに図形で取り込みたいんだがなんか方法ありません?
家の見取り図みたいなファイルなんだけど。 セル右クリックしたら出てくるメニューを禁止に出来ない?
書式設定とかコピーとか貼り付けとかメニュー自体出ないように >>224
サブクラスで出来るかどうか。
ここには答えられる程の上級者が居ないと思う。 >>226
保護かけると使えなくなる機能があるから無理なんだ エクセル2007についてです
セルをクリックすると、カレンダーが表示されて、そのカレンダーの日付をクリックすると、セルに日付が挿入される
という形にしたいのですが、ここで問題があります
一つはAccessがないため、カレンダーコントロールがないのと、もう一つはインターネット接続不可端末のため、どこからかDLするというのができないです
この場合のカレンダーから日付取得をするというのはできないのでしょうか? カレンダーのシートを作って、そこから選択させるとか >>231
早速参考にさせていただきました
ありがとうございます
ただ、これ起動すると、日付クリックした後、テキストボックスに日付挿入になるので
どこかのコードにテキストボックスではなくてセル挿入になるようにしたらいいと思うんですけれど、どこに記述するのがいいですかね?
まだvbaいじり始めた身としてはここまで複雑だといじりづらいというか >>224
BeforeRightClickイベント >>221
調べるとDXFはTextファイル形式で出来ているみたいでネットで調べながらやってみたけど、重い。まぁ俺の書き方が駄目な気もするけど。線の数が4万とか超えてる。 作者不明のファイルを修正しているのですが、そのファイル自身を指定するのにファイル名で
記述してありました。これだと「●●Ver1.0.xlsm」→「●●Ver1.1.xlsm」のようにファイル名を
変える度にコードを修正しなくてはならないためThisWorkBookに変えようかと思っているのですが
その場合なにか弊害とかあるんでしょうか? そのファイル自身だと完全に明確で揺らがないなら、thisworkbookでいんじゃね どこから参照されてるのか全部調べないとわからないんじゃないかそれ。
まあThisworkbookを知らないだけの可能性は高いが。 >>238,239
ありがとうございます。
今日内容を確認してきましたが、マクロが記述されたブック(A.xlsm)上でシートを作成し、それをコピーして
新規ブック(B.xlsx)を作成してからもう一度A.xlsmの特定のシートをアクティブにする、という処理の中で
A.xlsmのブック名を明示してありました。
今日は時間がなくて試せなかったのですが、この場合でもマクロが記述されたブックはA.xlsmなので
ThisWorkBookで問題ないかなと思ったのですが、それであっていますでしょうか? >>240
ThisWorkBookを知らないというかちゃんと理解していないのはその通りだと思います。
ThisWorkBookの主体がが変わる場合があるということでしょうか?
マクロ実行中にほかのブックに記述されたマクロを利用したりすると変わる、とかですかね? ThisWorkBookはプログラムが記述されているワークブックを参照せよっていう意味だからブックAを実行中にアクティブがブックBに切り替わったりしてもブックAに記述されたThisWorkBookはブックAを参照する エクセルテンプレートを開いた状態
↓
フォルダにある1つ目のtxtデータをエクセルテンプレにドラッグしてエクセル化
↓
エクセル化したC1:C8の範囲をコピー
↓
元々開いてあるエクセルのA1:A8に「数値」のみ貼り付け
↓
エクセル化されたデータは閉じて2つ目のtxtをドラッグしてエクセル化
↓
C1:C8の範囲をコピーしてテンプレのB1:B8に「数値」のみコピー
って感じでテンプレに測定機から出したデータをひたすら貼ってるんですが
これを簡単にするVBAとか可能ですか?
人によってはテキストをエクセル化はまとめて5つドラッグしたりして順番に貼ってく人もいます
エクセル化したデータの数値のみコピーしたいセルはC1:C8は固定
テンプレにはABCDと順番に貼って増やしていく
これをなんとかマクロかする案があればご教授お願いします。 テンプレート(.xlt .xltx)は何に使うの? >>245
その一言でも希望があってありがたい
どういう流れで作ったらいいか何か構想のヒントなどあればいただきたいです
・テンプレのエクセルにボタン設置
・テンプレ開くと同時にユーザーフォーム開くようにしてテキスト選択できるようにするのか
・そもそもVBAがまだ人間になれてない猿並のスキル
>>246
テンプレは.xlsxです、普通のエクセルの >>244
txtデータは、例えばカンマで区切られてるとか、空白で区切られてるとか、決まってるの?
内容的にはVBAがある程度使える人なら難しくないと思うけど、ちょっとネットで聞いて作ろうとかいうのは難しいんじゃないかな。 txtファイルがどのくらいの数あるのかで、どういう手順が良いか違ってくると思います。
そんなにたくさんないなら、テンプレファイル(◯◯.xlsm )に、ボタンを用意。ボタンを押したらファイルを選択するダイアログが出て、該当のtxtファイルを選択してデータを読み込む。
txtファイルがたくさんあるとこの手順は面倒なので、同一フォルダに入れてなんらかの順番で読み込むようにするとか。 >>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くらいやったりしてます、、 >>249
レスありがとです!!!そこです!
日によってデータ数が違って
5つの日もあれば30の日もあれば75の日もあります
ボタン作って該当するデータの数を任意で選べたりできないのかなぁと妄想してます この貼り付けるエクセルはそもそもこんなのでテンプレなの?っていうは一応エクセルの関数で
他の何種類もあるシートに複数の関数で出せる紐付けしてあるので
テンプレというか自分なりのベースのようなものです
本当はその関数すら慣れてる人ならVBAで余裕で組むんだろうなと思うのですがそんな欲ばる資格がまだないのでまずはこの作業を… GetOpenFilenameメソッドでダイアログで複数のtxtファイルを選択するか、「転記前フォルダ」とかに対象のtxtファイル入れておいて、フォルダ内をfor eachですべて読み込むか。読み込み済みのtxtは自動で「転記済フォルダ」に入れるか削除。
どちらにしてもtxtファイルの名前順に読み込むようになるだろうから、そこを一工夫する必要があるかも。 >>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 >>254
うおおおお
マジでありがとうございます!
いま外出中なので帰ったら速攻でVBE開いて取りかかります!!
他のこんな猿にアドバイスくれる人達に感謝のみ
批判されて当然のスキルしかないのでそういう覚悟もして相談させてもらってます
6月くらいまでには形にして自分もある程度
コードのルールや流れを猛勉強します
>>255
それも頑張ります、まず加工する知能を身につけます 6月て
こんなんIT系の仕事じゃなくても普通に1日で理解するやろ。。
多分セルごとに書き込むからファイル数とデータによっては遅くなるな クリップボードに整形したデータ入れてペーストでもいいのよ
タブで右のセル
改行で次の行 VBAについて詳しい方に質問です。
現在VBAでオートフィルタの自動プログラムを組んでいます。
そこで質問があります。以下の様なデータがあったとします。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
私の名前は、太郎です。
私の名前は、岩崎です。
あなたの名前は、太郎です。
あなたの名前は、岩崎です。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
検索ワードとしてスペース区切りで「あなた 太郎」と入力された場合
「あなた」と「太郎」を同時に含む行のみをフィルタリングするには
どういう記述を Criteriaにすれば良いのでしょうか?
Criteria1:="*" & [検索ワード] & "*"
現在こんな感じで記述してますがうまく動きません。
AND条件、そしてOR条件で指定する方法を教えてくださいm(_)m >>261
それやるならオートフィルタじゃない。
アドバンスフィルタ。 >>261
シート上でオートフィルタかける時にできること以外のことはできない どうしてもその記述でやりたいならワードをスペースで分割してから条件2つ指定する ありがとうございます。
アドバンスフィルタとやらを調べてみます。 >>261
And条件の場合はこう書く
Criteria1:="=*あなた*", Operator:=xlAnd, Criteria2:="=*太郎*" >>254
これを、やってみたけどcellsのところでエラーがでます、うーん
頑張ります >>269
それはたぶん、txtファイルの中身が想定外
例えば5行以下しかないか、C列にデータが入ってないか >>269
すまん。変数 r はforで回ってた。 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 >>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 ワークシート機能とか使わないなら、
・その表を全て一気にもにょっと2次元配列(tableA)にいれる(コンマ数秒)
・2次元配列(tableB)を一旦定義
・tableAの各行(イメージね)をforeachする。++カウントする変数をつくる。これはtableBの行数。
・foreachのなかで、tableAのS列がその条件に合致しなければ、tableBに行のそれぞれの要素を代入する(redim preserveしながら)
・できたtableBをどこかにペタッと貼る
Excelぽくやるなら
・オートフィルタする
・2次元配列に一旦もにょっとコピーする(可視セルのみ、CurrentRegionかな)
・シートをクリアするか他のシートにコピーした2次元配列をペタっと貼る ちなみに行をforeachしながら行を消すとズレが生じるんじゃね、しらんが >>254
色々いじっていますがこれをどう手直ししていいかわからず…
たとえばこれをテキストを変換したときにF2:F13にくるデータを
エクセルにはB5:B16、C5:C16と順番になるよるに出力するようになるにはどう調整すればいいのか、がんばって調べてます 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が存在してて
どこを今度は変えたらいいかわかりません >>281
cとかfは変数だよ
ワークシートの列じゃない 猿とか以前にそもそも基本知識すら身に付けてないのでは… そう、変数なんだというとこまではぎりぎり何とかわかったんです
ただ、引っ張ってくるテキスト側の列をどこで制御してるのかがわからず
>>283
完全にその通り
単純に勉強不足
ネットでかじってばかりじゃダメだと古いけど本も借りました
ただ本当にマジで難しい…
https://i.imgur.com/7Ujyfqa.jpg 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 うお、変数の宣言をあらかじめわかりやすくしてくれて馬鹿な俺を誘導してくれようとする人が!!絶対そんな感じのありがたい人だ!
今から車に乗って帰ったら速攻PC開きます!−−!! >>281
>>284
まずVBAの入門書を読んで基礎知識を
整理するといい(するみたいだけど)
あと「テキストから引っ張る」っていう言葉が曖昧
「テキストファイルを読み込む」「セルに展開する」
みたいに仕様を適切な言葉で把握しておくだけで
ネットで検索すればすぐサンプルコードが引っかかる
本当はなるべく「f」も「file」とか具体的に
命名した方が分かりやすくていいと思うけど
(ファイル用変数とセルの列を混同した一因だろうし)
まず日本語のレベルで言葉を整理しよう >>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
何度やっても一瞬で完璧に処理が終わる…
だがさっぱり意味がわからん、、
本読みます。。 ああ、ダメだ。'でメモりまくったけど
出力する側のエクセルシートの列の指定はわかったけど行の指定がわからなかった。勉強ですね。。
みなさんありがとうございました。 ごめん、ダメだ。助けてください。
混乱しまくってます。全然違った
読み込むテキスト側の行指定がわからない、、
ベースの方にテキスト2行目8行目からを指示、
とかそれをしないと会社で対応できないです… そりゃ変数すら知らない知識レベルならこんな短時間じゃなんもできんだろう… 先輩曰くとりあえずわからなくても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日
毎日勉強しないとなぁ。ほんと PDFファイル(画像)をEXCELに貼り付ける際の画像の素の大きさってどうやって取得できます? いきなり別ファイル(txtファイル)読み込んだり、配列変数あったりで難しいよ。
本来はもっと基礎からやらないと。 >>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 >>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日 TekisutoでもTextでもTexteでもないのな 今日、神懸かり的に職場の測定機のPCのツールとして産声を上げました
あとは起動と同時に出るユーザーフォームにボタン4くぐらい作って割り当ててとりあえず完成しそうです
そして今日から本を愛読して変数について基礎から学んできます
自分で変えたのがわかるように誤記ぐらいにしとかないと何かのコマンドやコードがわからないので
textって打ったら先頭が大文字に変わるから
こりゃいかんと なんでもいいから一つ作れってのは作ってもらえって意味じゃないと思うな 変数の定義や宣言をとにかく最初にする癖をつければ
後でわかりやすいことが本でわかり
そして英字じゃなくてもいいことに驚きました
慣れてるたち人のサイトだと
Dim Folderpass As String
Dim FileInt As Long
とか英字だけど
Dim フォルダ場所 As String
Dim ファイル数 As Long
とか和文字だと支障でますかねこれ 個人的には変数名で日本語は避けてる。
逆に読みにくいので。 拙者も日本語はコメントで書くようにしてコードは英数字で書くようにしている なるほど、俺も英字で作る癖つけた方が良さそうですかね
字の色でわかるだろ…とは言え、なんかの関数やコマンドと似てるとやはり最初は難しいですね
Tekist
Fname
Fpass
shseeet
とかにしてこれ俺の宣言した変数だわ
って最初は作ってみます
あざす! 変数の付け方とかで、書いた人の実力が分かるという説もあるから。
私は小文字で始めるキャメル式が見やすいと思って大体統一してる。 > とか和文字だと支障でますかねこれ
今時C/C++ですら変数名に漢字使えたりするぐらいだから問題ない
特にフォルダーパスをFolderpassとか書くような人は積極的に使うべき VBAだとそんなに困ることはないんだけど、.netはライブラリが膨大すぎて、既存のメソッドやプロパティと名前が被るかどうかの確認が面倒
あと、語彙力が足りなくてユニークな英単語が思いつかないとか、辞書で調べて付けた変数名があとから見返すと意味がわからないとかある >>309
>語彙力が足りなくてユニークな英単語が思いつかないとか
曜日、曜日って英語でなんて言ったかなー
せや、yb ですましたら 最近プログラム自体始めた初心者です。
日々勉強ばかりですので、汎用性が高くなるよう目指し、
知識を入れてはコードを改良し、それを外部保存、そして
実行するブックで呼び出して使っています。
ついこないだ引数という便利なものを知り、さっそく使っているのですが、
ひとつ疑問が。
「特定セルに、作成したリストの上から順に内容を書き込む」という
簡単なfor〜nextループマクロを使いまわしたいのですが、そのループ処理内容を
callなどから設定することはできるのでしょうか?
(たとえば、あるブックでは印刷処理したい、けどこっちではシートコピー処理したい、
など)
引数で、特定セルやリストの開始行は設定できたのですが。。。
宜しくお願いいたします。 >>311です。一部分かりづらかったので訂正いたします。
×「そのループ処理内容をcallなどから設定することは〜」
〇「そのループ処理内容を、実行するブックから設定することは〜」 馬鹿が一気に出てきたのはコロナウイルスで脳炎や痴呆症でも発症するのか? >>311
サブルーチンの中にブック名を判定するIfを入れるとか、引数を増やして処理を切り替えるとか、方法はいくつもある 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
見様見真似というかネットからパクってユーザーフォームのボタンに追加できました。
このスレの人たち凄いです >>311
他のナウい言語みたいに関数ポインタとか使いたいのだろうが
おとなしくコマンド文字列でも渡してselectでもしとけ ナウい変数名を考えようと思って色々試したら、結構いけるじゃん。
Dim ヽ, 卍, ¶, , f, , , ≒, ♪
♪ = 1
Debug.Print ♪ あ、普通にこれでいいか。
Dim 骸骨剣士, 死霊の騎士, 幽霊, 死神 >>319
うちの新人が最初に書いてきたコードがそれだったわ (実話
もちろん熟語の意味と変数の用途は無関係で、厨二ワードを思いつきで適当に並べただけ >>311
初心者なら具体的な処理を抽象化していく
ボトムアップのやり方が分かりやすいと思う
たとえばかけ算の九九を求める関数に
引数でXを渡してXxX(12×12など)を
求める関数に抽象化すると使い道が広がる
あるいは5行6列目のセルを処理する関数を
X行Y列目を処理するように拡張するだとか
関数の引数は数学の変数のように考える
そして関数(やクラス)を自作する時のポイントは
なるべく関数を小分けにして組み合わせて使うこと
関数が大きくなると理解するのも難しくなるから
印刷やシートのコピーとか別の処理を
ひとつの関数で全部やろうとしないで
別々の関数に書いておく
それで呼び出し元の関数から
実行する関数をIF文で切り替えたりする
Excel VBAに限らずプログラミングの定石 個人的な意見だけど
変数を日本語にする事の欠点は、目立ちすぎて、他が見にくくなる事だと思う
ループカウンタの様な頻出する変数には、制御構造が見にくくなるので避けるべき
ルーチンの目的的なものとか、あまり使わないような変数については、場合によっては推奨 いいたいことはわかる
なでしこみたいに構造もそうなってれば、比較して自然に見えるしね
まあでも英語で慣れちゃってると、気になっちゃうから可読性低いと評価してしまうわ >>303
絶対に止めた方が良い。
今、他人のそういうコードで四苦八苦してる。
しかもプロシージャも日本語だから
If 測定結果 Then
などとあって、"測定結果"が変数なのかBooleanを返すプロシージャなのかすら直ぐには分からない。 がっつり英語だと、こんどは辞書を引く作業が待ってることもある
発音がわからないと会話で困るし 特定の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に詳しい人、よろしくお願いします。 grep なら一行でできるのに VBA でやらないといけないのか 人に送ったら日本語フォントない海外PCで全く動かなくなったりしたな >>330
参考リンク先のどのプログラムを試して、どの行でどんなエラーが出たか書いて
エラーが出たままでCtrl+Cを押せば、エラーメッセージがクリップボードに入るから、それをコピペして
あと、目的のWEBサイトの文字コードはちゃんと確認した? >>331
まあ wget | nkf | grep のが簡単かもね >>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 >>326
確かに。
でも日本語フィールドが多いSQL文の中で、一部の変数も日本語だったりするのとか、変数と気付かなかったりするのもあるし、最悪だよ。 >>325
なんの測定なのか知らんけど測定結果がBooleanな時点で知能の足らない職場と言うことがわかる
コードレビューなんてしたこと無いだろ 辞書で調べても馴染みのない単語でかえってわかりにくくて結局日本語にしてみたりね 311です。
>>314,317,322
私がやろうとしていたことが、まず効率の悪いことだったんですね・・・
細かく分けて関数作って、それを組み合わせて作る方法を取りたいと思います。
(ただ、どこまで細かく分ければいいのか、まだ要領を掴んでおりませんが)
ありがとうございました。 初心者ですがご教授下さい
サンプルの工程能力で1個につき6項目の測定値をソフトがエクセルにデータ出力してくれるけど、日によっては23個だったり25個だったりしか測定できず
残りの記入方法は人によって様々で
ある人は測定値のバラつきに近い値をテンキーで手打ち
ある人はエクセルのrandbetween関数で
各項目の測定値のMAXとMINで乱数だしてそれをコピぺ
サンプル1 サンプル2 〜サンプル30
項目1
項目2
項目3
項目4
項目5
項目6
こんな並びで全項目測定後に出力されるから項目の途中で止まることはないです
「サンプル1〜30の間の項目1の行に空白があった場合、それより前(左)にある全ての測定値を参考に乱数でサンプル30の項目6まで埋める」
これは難易度かなり高いですか? 誤記というか間違えました
「サンプル1〜30の間の項目1の列、又はセルに空白があった場合、それより前(左)にある全ての測定値を参考に乱数でサンプル30の項目6まで埋める」
です
すみませんがどういったアプローチがあるのか
そもそもできるのかご教授下さい >>342
それは多分難しくないと思うけど、読解力がなくてよく分からない。
サンプル的なものを挙げてもらえると分かりやすいかも。 >>340
>どこまで細かく分ければいいのか
基本的に処理は関数名に沿って分ける
関数名から逸脱した処理があれば
別の関数に分けて整理していく
だから関数や変数の
適切な命名が重要になってくる
面倒でも名前と処理を対応させた方が
後でメンテナンスしやすくなる >>343
いや、俺の説明力がなくて、、
というか行列が逆でした
再度説明させてください
https://i.imgur.com/D4MOqky.jpg
こんな感じで機械がエクセルに出力してくれるけど
残りのサンプルの数字は上の測定値を見てみんなそれぞれランダムにテンキーで入力したりと、いわゆる数値を適当にバラして打ち込んでます。(偽装というほど重要ではないので)
日によって測定できるサンプルが数が違います。
参考になるか程度のスクショになりますが
「サンプル1から30までで空白の行列があったらそれまで測った上のサンプルの測定値を元に乱数でサンプル30の項目6までVBAが全て記入してくれないかなと、
こんな感じです 「列、又はセルに空白があった場合、それより前(左)にある全ての測定値を参考に」というのは?
その例でいうと、
・項目1のサンプル8、9、10が空欄なので、1から7の数値を元にして適当な数値で埋める。
・残りの項目についても同様
ということですか?つまり上の数値を元にしてるけど。
処理自体は難しくないとは思います。 >>346
その例でいうと、というか今の職場の手間になってる仕事がまさにその通りです
上の数値を元に残りの項目を誰かが埋めてます
どんなアプローチで行ったらよさそうかアドバイスいただませんか
Rnd関数Int関数、Loop、Offset
調べてもなかなかわからずです‥ >>345
数字を偽装するルールが人によって違うのはわかったけど、あなたはどういうルールでやりたいのか、もうちょっと厳密に書いて
「それまでの数値を参考に」という表現では曖昧すぎてプログラミングできない
例として、サンプルが7個しかなかった場合は、その7個の数字をどう使って30個に増やすのか? >>348
数式と一覧を削りましたが普段はここの赤矢印に測定したデータのMax値とMin値を入れて
EXCELの関数でこのような数式で乱数を
出しています
数年前に自力で作ったけどもはや覚えていないレベルです
https://i.imgur.com/eglO3Ph.jpg あとスクショ取りたいが故に行数の抜けやズレが、、、すみません とりあえず行と列の位置は>>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 >>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 >>353
神様過ぎびっくりです。
セルをクリックすると.0754322457888とか小数点が残ってるのですがこれを
EXCELのROUND関数みたいに四捨五入した状態でここに出力するようにできますか?
四捨五入で0.000の桁で出力できたらもう
職場の2人が失職してしまうレベルです >>354
Cells(行, 列) = Round(Rnd() * 幅 + 最小, 3)
実際、ごく簡単なマクロで仕事を効率化したおかげで毎年たくさんの失業者が出てるからほどほどにな
経営側でなければ、サビ残がなくなるぐらいのところでやめとけよ 無意味なデータ入力に数百万の人件費を払う会社か
すげーな
マクロで解決するより、その作業をなくす方法を真剣に考えた方がいいんじゃないか? コード教えて君もいるし、PC博士気取れるから教えちゃうやつもいる 一時しのぎにはなっても長い目で見れば迷惑にしかならない 自力でマクロも書けんやつが作ったマクロで会社の経理やるなんてブラック企業しかない 4月は零細の新入社員が単純作業をマクロでどうにかしようとがんばる時期 >>363
もともと99%はブラックだし
会社の規模とか無関係に 初歩的な質問なんですけど、ロック付きのブックを編集してSaveAsやcloseで保存したときにロックなしのブックにしたいんですが、どうやればできますか? >>366
イベントプロシージャにロックを外す処理を書けばいい 俺に会社の経理やらせてくれたら自分の口座に自動で入金する処理入れるよ 画像フォルダのファイル名を取得→ファイル名と同じ文字列の入ったセルに画像を挿入→画像をセルのサイズに合わせるというサンプルコードを見つけたのですが
画像フォルダ内にファイル1〜5まであり、エクセル内にファイル1の文字列がない場合、「オブジェクト変数またはwithブロック変数が設定されていません。」のエラーが出ます
おそらくIFでその場合の処理を設定すればよいのではと思うのですが、変数の設定の仕方が分からないです
昨日今日始めたネット聞きかじりの知識で申し訳ございませんがアドバイス頂けないでしょうか >>370
まずはうまく動かないコードをここに書いて >>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 最終的には画像1-4はシート1、5はシート2みたいな感じに貼りたいんだがとりあえず画像1の文字列ないとエラー起こすのを直したいです どこでエラーが起きてると思う?
検索して見つからなかったセルに対して何かをしようとしたから、何に対してやるんだよーってエラーが起きたんだよ
コードを見ると、Findメソッドの戻り値に対して直接Activateしてるから、そこをばらす必要があるので、一旦戻り値を変数に受けるといい
セルはRangeオブジェクトで、 Findメソッドは通常、Rangeオブジェクトを返す
オブジェクトを変数に代入する場合は、 Set をつける
見つからなかった場合はFindメソッドはNothing を返す
オブジェクトの比較には、Is を使う 例: If Not(r is Nothing) Then 〜
あとはがんばれ 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 >>342
「それより前(左)にある全ての測定値を参考に」が仕様としては曖昧模糊としてる気がする。 >>375
>>378
ありがとうございます、動かしながら理解していこうと思います >>338
知らねーよ。
10年以上前の、他社から引き継いだ、正直全部書き直したいけど今動いてるからそっとしておいてるコードだよ。 >>381
理解もできない代物を知らない誰かの作ったコードで動かそうという馬鹿 理解してないコードを使う無能に仕事やらせるとかやっぱブラックだったか そもそもexcelVBAって素人が頑張って自動化してみましたってのが99%なんだから
そういうのをメンテしなきゃならない羽目になったって話だろ
プログラム板の中では異質なスレなんだと思う
コードレビューとか言ってるやつは確実にアスペ、そういう事情が想像出来る脳みそが生まれつき備わってない
相手するだけ無駄 他の誰かがってのは全部言い訳
仕事してメンテするなら自分自身が目の前の有りものを完全理解しないといけない
事情は関係ない
仕事としてやる以上自分の責任として取り組むべき
それを怠って開き直るのは無責任であり無能でありいつまでも何も成せない
趣味ならしらん >>386
> 今、他人のそういうコードで四苦八苦してる。
↓
> 今動いてるからそっとしておいてるコードだよ。
言うことコロコロ変わりすぎw 散々ここで聞きまくって不快な思いをさせた物ですが完全に職場での運用に成功しました。
本当にみなさんのおかげというか頭良すぎですねここの人は…
フォルダ内にあるtxt全ての任意の列行を片っ端からエクセルにコピーする
空白の部分は乱数で処理
この辺は無知にとってはえげつないです。
提案で出そうと思ったらもっと大きな発表テーマで使うぞと言われました。
100のワークの測定データを作るのに2日かかってたのが5分でテンプレートに出力完了… せっかくtxtという利用しやすいデータ形式なのに
わざわざxlsなんかにしちゃって
トドメとばかりにゴミデータをインプラント
面白い人だな >>383
実際そうだし、というか、そんなの多いぞ。 >>386
素人じゃないと思うよ。
形の上では。
お客は自ら作るという会社では無い。
作ったのは請け負っている会社だよ。
コメントに会社名らしきものが書かれてるし。 >>389
あのね、客の要望は有るんだよ。
要望に答えるためには、今動いてるものも解析しないと答えられるわけが無い。
そのコ一ドが何やってるかわからずに機能追加なんてできるわけが無い。
というか、こんなのVBAに限らず開発やってる会社なら何処でもある話だけどな。
ここには開発専門で仕事したことのある奴が少ないということか。 他社が作ったコードを客の要望で機能追加
しかもVBA
そんなズタボロの状態で開発専門とか大丈夫かよw >>394
その会社名らしきところに使用料とか払った?
それともその会社に無断で会社名入りのファイル使ってるの? >>396
今まで幾つかの開発会社で働いたが、どこでもある話。
VBAにも限らない。
まあ、日本語変数とか日本語関数はVBA以外では聞いたこと無いけどな。
前のコードが酷いので、書き直したらもっと酷くなったなんて、某SE本にも書いてあった。 >>397
プログラムは客のもんなので、そんな話にゃならねーよ。
普通はそうなる。
客のもんになってない例もあるかもしれんが見たこと無い。 >>397
これ、VBAの話ね。
コンパイルする言語の場合はそうでない例があったな。 >>400
> プログラムは客のもんなので
↑
> 他社から引き継いだ
ボロ出し過ぎw いい加減、他人の宿題とか仕事とかに安易に回答与えるのやめたほうが
いいんじゃないかと。 大手から零細まで、色々なところで仕事してきたけど、会社によっては日本語の関数とか変数は別に珍しくなかったな 現実問題として、VBAで複雑なマクロを書くと重くて動かないと思うんだけどな
それでも我慢して使っているのかな? Excelでポリゴンゲー作るとか、
相当極端なことをしない限り大丈夫。 複雑な処理だからって重くなることはないだろ
重い処理をするから重くなるのであって >>402
お前、事務員だろ。
自分のボロに気付いて無いw
開発会社で働いたことある奴ならすぐわかる。 >>405
スキルの低い奴はそうなる。
もちろんVBAは遅いけど、VBAで実施するようなことで、どうしても遅くなると想定されるような処理は殆ど無い。
VBAで実施するようなことじゃなければ別だが、そういう話はあまりない。 >>404
話には聞いたことがあるが、自分が目の当たりにしたのは今回が初めてだ。 関数名だけ日本語ってルールにしてるところは見たことがある
意外と見づらくなかった >>408
> 開発会社で働いたことある奴ならすぐわかる。
なら詳しく説明してみなよ
客のものを勝手に引き継ぐとか犯罪だぞw >>411
まあ、読むのは慣れだと思う
慣れればそんなに苦じゃないし意味不明な英訳調の関数名や変数名よりマシ
ただ入力がかなり面倒 >>412
???
日本語が理解出来ない人?
客が依頼していた開発会社を変えただけのことだろ。
10年前依頼されてた開発会社のコメントがソースにあったが、プログラムは客のもんだ。
今、依頼されてるうちの会社がどうして10年前に依頼されてた会社の了解を取る必要がある? >>412
というかね、こんなの普通によくあることだぞ。
別会社のコメントなんて何度も見たことある。
開発会社で働いたことあれば、そんな所に違和感なんて感じないだろ。 ソースコードの著作権をどっちがもつかは契約によるぞ
著作権をシステム会社側がもってるのに違う会社に開示したらそれは違法行為
知らずにやってるってのは昔はよく聞いた
10年前に依頼されてた会社の了解を取る必要はないが
普通はソース開示受けるなら開示元に著作権の確認はする >>416
そんなの常識だろ。
だが、そこまで分かってるなら結論も容易に想定出来ると思うんだが。
VBAの開発ではExcelならブックそのものにソースが付いてくるし、実質派遣のような形態も多い。
つまり、契約上客のもんになってると想定するのが普通。 ここで言ってる想定ってお前のことだからな。
そんな想定も出来ずにいちゃもん付ける奴に言ってる。 >>414-415
> 客が依頼していた開発会社を変えただけのことだろ。
それ引き継ぐなんて言わんだろ
お前の会社から見たら単に客から改修を依頼されただけ
元のソースを別会社が作ってたか客が作ってたかなんて関係ないし
> 日本語が理解出来ない人?
お前の日本語がおかしいだけ
まあどんどん辻褄合わなくなってるだけとも言うがw >>419
???
言うだろw
日本語を理解出来なかった言い訳が見苦しいw >>419
日本語がおかしいというより、自分の脳内理解が共通認識だって信じて疑わない人だったようだぞ
かまった俺も悪かったが、俺は今後スルーするからお前もそうしろ スレ違いになってきてるとは思うが。
最初のほうの386には
「そもそもexcelVBAって素人が頑張って自動化してみましたってのが99%なんだから
そういうのをメンテしなきゃならない羽目になったって話だろ」
って書いてあって、
ここ数レスはプログラム(開発資産)として引き継いだ中のVBAソースコードに焦点が当たってるように見える
まず引き受けた方がプロ(仕事としてVBAをやる)として、
前者ならドキュメントとかなくても(時間さえあれば)改修も簡単だろう。
後者ならドキュメント残してないやつ、もしくはそれを知らずにスキルもなく引き受けたやつが悪い。
まあこんな、前提とゴールをあやふやにして不毛で幼稚な言い合いをしたいなら別にスレを立ててろ >>420
> 言うだろw
言うのはお前だけなw
>>421
知ったかが盛って語ったら引っ込みつかなくなったパターンだと思う >>422
開発やったこと無い奴だから簡単等と言えるw
確かにドキュメントは無いが、あっても他人のコード読むのは大変だぞ。 >>423
引き継ぎって言葉分かってる?
それに、想像力があれば一番最初の段階で想定できるような話なんだがw 引き継ぎ 開発でクグったら最初の3つとも他社からの引き継ぎのことが書いてあったわw
開発会社じゃ当たり前のことなんだけどなw >>422
ああ、素人のコードを引き継いだとしたらの話か。
まあ、素人の短い簡単なコードならその通りだな。
まあ、>>394に書いた通り、形の上では開発会社らしき所のコードだし、コード量も多いからねえ。
VBAはそういうの多いんだよ。
形では仕事で受けてても素人のコードとか。 >>427
出しても構わんがw
マナー的に出してないだけでw
というか、お前もググって見てから言えよ。
事務員の上にググることさえ出来ないのかよw 出しても構わんけど出せない
うんうん、そうだろねw >>423
な、お前のような素人だけだよw
客が依頼してた会社を変えて、引き受けたのを引き継ぎとは言わないのはwww 必死にググったのは褒めてやるよw
でも、それ運用とか保守の話だろ
そりゃそう言うのは連続してるから引き継ぎって言うだろうけど、10年前の他社のコードの改修を引き継ぎとは言わんわな >>434
必死?
一発で出たぞwww
またボロが出る。
開発は作って終わりだと思っているのか?
普通は保守へと継続していくもんなんだが。
何も知らんのなw >>410
ブラック・ショールズ式ってのが金融の世界にあるんだが、これをググって
初めて日本語の変数見て目が点になったw 質問していいのか?
グラフの近似式をセルにコピペするマクロだ。 あらら、他社のコードの保守まで受託してるって話にするの?
そういうケースだと普通はドキュメントも貰ってるはずだけどろくなドキュメントがないって話かな
そんなハイリスキーな受託して>>325みたいな愚痴こぼしてるなら知能の足りない会社と言われてもしょうがないじゃん
まともな会社なら受ける時に調査費用と時間をもらってドキュメントを起こし直す
でないと保守できないから
>>437は保守が何をするのかすらわかってなさそうw 近似式をテキストとしてセルに貼るとこまでできたが、そのテキストから係数を得る方法はないですか 近似式をセルに落とし、計算する作業が大量のあるためです >>440
プw
引き継ぎって知らんの?
いい加減、恥を晒すだけだぞw
というか、VBA案件だけの話だと思ってる?
爆笑もんだw
1つの客から1つの案件だけのわけね―だろ。
寧ろVBAの開発はメインじゃね―ぞ。
DBにAccessなんて普通は無いんだ。
バックエンドとか知らんの? >>440
あと、知らんのだろうけど、ドキュメント類についてはVBAの場合はそうならないことが多いんだよ。
今までいろんな案件で仕事したがドキュメント貰ったことなんて記憶に無いくらいだ。
で、ドキュメント作る時間も無いことも多い。
これはVBA案件の特殊性だろうな。
VBAが言語として糞呼ばわりされる原因の1つだろう。 >>446
無理にこのスレに居なくてもいいんですよ >>442
近似式a x + bからa とか bを切り出すってこと?
VBA使わずともエクセル関数で出来るでしょ
RIGHT、LEFT、MIDとか駆使しろ >>444-445
今度はAccessガーとか言い出したのか
まあ言い出すのがAccess止まりなのが物悲しいけどねw
ドキュメントも作らずに何を保守するつもりなんだよ
言われたらその場であたふた調べてやっつけ仕事でテキトーに改修するのか?
そう言うクズ会社なのはよくわかったよ >>449
バーカw
今度はじゃね―よw
ある特定の案件だけと考えるバカに教えてやってるだけ。
客からの要望はたくさんある。
VBAなんてたくさんある中のごく一部なのがむしろ普通。
ドキュメント作らずってw
それは最初に受けた会社に言えよwww
現実を知らないニートにゃ分からないんだろうなw 日本語が通じないんだよな。
ドキュメント残してないのがコッチにされてる。 トヨタ並に名前が知られた客から提示されたのがプログラム本体だけで、それ以外何もありませんってことだって有るんだけどな。
結構昔の話だが。 連投バカは日本語が理解できないらしい…
まあ無職の脳内妄想の限界かなw
> まともな会社なら受ける時に調査費用と時間をもらってドキュメントを起こし直す 長文質問失礼いたします。
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コード→文字への変換を行おうとしています。 文字として表示って、その範囲をどんな文字で表示したいんだ?
画像バイナリデータを画像データって、普通画像データはバイナリなんだが
文字として表示しないならとりあえずAscBとChrB使えば一致するんじゃね >>455
アスキーはAscUじゃなくてAsciiな
あと、画像データはバイナリなのに、どうして文字に変換するのかもわからない
方法が間違ってないとして、どこかでデータが化けてる可能性があるけど、どこが悪いのかその文章だけではわからない
まずは変数の型をチェックかな -32443は文字化けした時に表示される文字のコードだから、根本的にデータの受け渡し方法を間違えてる 覚え初めてまだ三日だけどなかなかエクセル関数のように簡単にはいかんもんだね…
流石入門といえどプログラミング、敷居が高い
(A1:B1)から羅列されてる数字を(C1:D1)に
コピーしてABS関数で絶対数に変換
こんな事すらなかなか難しい VBAは覚えることが多いだけで
やってることは関数と大差ない >>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型です。 >>461
やったというより訳も分からずここの人にただ完成させてもらっただけだから俺の本当のVBAの勉強はこれからという感じで
おかげで肩の荷が降りて基礎から学べる幸運な情況ですね
変数の宣言やデータ型は何となく理解して
こっから仕事で簡単に自分でやってけそうな関数をこなせるようにしていきたい
ここの列が空白になるまで指定の列に四捨五入した数値を貼り付け
とか絶対数を貼り付け
あとは数値のバラし
とか覚えていって自職場で簡単なVBAのテンプレート作って行けたらいいなと >>458
アドバイスありがとうございます。
大部分(129〜159、224〜252以外)の文字変換は問題なかったですが、今一度変換方法を再確認いたします。 >>462
もしかして、それって何も変換せずにそのままバイナリファイルに書き出せばいいのでは?
テキストファイルとバイナリファイルの違いは、出力方法はわかってる? >>462
だから例えば130や250という数値をどういう文字にしたいんだ?
>Bitmapファイルをテキスト形式で表示したもの
普通に言うビットマップファイルはバイナリだからテキスト形式で表示なんてできないが
というか、たんにいわゆる.BMPのファイル作りたいって話じゃないのか
お前がいってるBitmapファイルってどんなんだよ
なんにせよ出力したいデータフォーマットちゃんと確認しろ >>467
外出を自粛したり自宅で仕事する人が増えたから
みんな体力とヒマを持て余してる >>462
AscUとかASCiiとか、なんでいちいち気持ち悪い書き方をするのか
こんなん入力するのも面倒だろうに
正式には全部大文字でASCII、許容範囲で小文字ascii、賛否ありそうだけど頭だけ大文字Asciiもギリ許せる、どれかにしてくれ
1文字たりとも間違いを許さない厳密さがないとプログラミングは無理だぞ とにかく、説明がへたくそすぎて、何が悪いのかさっぱりわからん
動かない今のプログラムをここにそのまま書いてくれ
たぶんそれ見た方が早い
あとオシロスコープの機種名も たぶん、こうだな
Open "オシロ画面.bmp" For Binary Access Write As #1 'ファイル名を指定
Put #1, , 変数名 'バイト配列をそのまま全部出力
Close #1 '終了 >>454
日本語が理解出来て無いバカニートはお前だろw
>要望に答えるためには、今動いてるものも解析しないと答えられるわけが無い。
>そのコ一ドが何やってるかわからずに機能追加なんてできるわけが無い。
だから>>325で四苦八苦してるんだろ。
ついでに言うと、こっちはちゃんとドキュメント残してる。
でもな、VBAの場合で今まで見聞きした前任者、前任の会社は残して無いことが非常に多い。
開発やってればそういう話、よく聞く話なんだよ。 >>474
マジで日本語理解できないの?
時系列ってわかる?
それとも無職の妄想だから同じ話を繰り返すしかなくなったのか?w
> まともな会社なら受ける時に調査費用と時間をもらってドキュメントを起こし直す
できてないから今アタフタしてるだけだろ >>475
???
出来てるから今、四苦八苦してるんだが。
解析に苦労してると書いてるだろうがw ついでに言っとくと、正直に言えばたった今じゃねえ。
2週間程度前の話だ。
でも掲示板で、そんな説明することは無いだろ。
どーでも良い話だからな。 >>475
さらにいうと、お前の言うとおりなら、日本にはまともでない会社だらけになっちまうけどなw >>476-477
できてるって何が出来てるんだ?
どんどん話が壊れてるぞ
>>478
他社コードの保守はリスク高いから基本受けないし受けるとしたらそれ相応の対価を要求するなんて常識だぞ
言いなりになってそういうのを受けないと死んじゃうクズ会社なら愚痴ってないでまともに働けよw >>479
常識が通用しない現場なんていくらでもある
お前の経験値が足りないのはよくわかったから、あと15年ぐらい、もっと修羅場を経験してから出直してこい >>480
うん、常識の通じないクズ会社があることは知ってるよ
それが当たり前とか思ってるのが痛々しい
って話ねw >>480
結果的に0から作るのと見積額が変わらなくなることも
0から作った方が見積もりが安いこともよくあるw C5とD5の平方根をE5に入力する
これをC列が空白になるで行う
のシンプルなコード教えてくだせぇ >>483
Columns("C:C").ClearContents >>483 意味不明
>>485 なるほど、うまいな 皆様は、同一のブック内で複数のマクロがあり、それらの実行時に共通の処理を
させたいとき(実行しますか?の確認メッセなど)どういうコードを
書いておりますでしょうか。
私は開発→挿入→ボタン(フォームコントロール)にそれぞれマクロを登録して
実行させており、これらのボタンclick時に共通イベントを設定しようと
考えているのですが。非効率的でしょうか。 補足です。現在は共通処理sub作って、マクロごとにそれをcallしておりますが、
そのブックで日々マクロが増加してきており、そのcall一行すら面倒になってきました・・・ >>489
application.callerとselect caseかな >>492
おお、vba実行時に処理できるメソッドがあったんですね!
自分の勉強不足でした、大変助かりました。使わせていただきます。 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と
なってほしいのですがお手上げです >>479
あ〜あ。
素人丸わかりw
SEとか、技術者の勉強してるニートかなw
できてるってのは解析する時間もドキュメント残す時間も貰ってるということ。
ということは=それにかかる費用も貰ってるということだよ。
こんなことも理解出来ないのか?
VBAの案件ってのは残念ながら能力の低い奴がやることも多く、常識が通じないことが多い。
なにしろ時給2000円とかでやってる奴も結構いるくらいだ。
俺の場合は時給換算じゃね―けど時給になおしたら最低でも1.5倍は貰わないとやってられねえ。 >>499
> できてるってのは解析する時間もドキュメント残す時間も貰ってるということ。
> ということは=それにかかる費用も貰ってるということだよ。
↑
> 今、他人のそういうコードで四苦八苦してる。
> こんなことも理解出来ないのか?
で、何を理解しろって?
お前の頓珍漢さか?
あと3,000円/hってドヤるほど高くないぞw 何が分からんのか分からんから、とりあえず値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 ちょっとだけ汎用的にも書いた
こっちはベテランの叩き台にしてほしい
長いしあんまり突っ込まれると恥ずかしいから画像
https://imgur.com/4pE5uE6 >>500
日本語がまともに出来ないアホには理解出来ないからお前には無理w
何を理解しろって、別にお前に対して理解しろなんて言ってないぞ。
理解出来ないアホさ加減を嗤ってるだけだw
アホだから3,000円/hに突っ込むと思ったwww
最低でもと書いてるんだが。
そもそも、そこに突っ込むんじゃ無くて2000円/hに突っ込め。
そういう所はドキュメント無しで終わってもしようが無い。 >>501
派遣の場合は高い部類に入るだろうね。
力量があって派遣じゃなければVBAでも余裕で超える。
ExcelVBAでのセルとかシート操作の話では無くなるけど。 >>504
> 日本語がまともに出来ないアホには理解出来ないからお前には無理w
結局説明できなくなって理解力ガーとか低能が逃げる時によくやる手で笑うわ
まあどう言い逃れしようとしても
> 今、他人のそういうコードで四苦八苦してる。
って書いたのに突っ込まれたら何か知らんけどできてると言っちゃったアホがいた事実は消せないよw >>501, >>505
派遣で事務処理なら高いほうだと思うぞ
まあ大前春子みたいな奴は知らんけどw
ただ、>>499は
> 俺の場合は時給換算じゃね―けど
とか言ってるから正社員なんだろ
ならわざわざドヤる程の額じゃねーよ
ってこと >>494
「ズレ量」「位置度」の意味がわからん
図を書いて、「ここがズレ量」とか専門用語を使わずに説明してくれ >>494
たぶん
× Cells(Gyo, 4) = Sqr(Cells(Gyo, 2), Cells(Gyo, 3)) * 2
○ Cells(Gyo, 4) = Sqr(Cells(Gyo, 2)^2 + Cells(Gyo, 3)^2) * 2 >>506
日本語、本当に分からないの?
四苦八苦してたのはその通りだが。
お前は、時間とお金を貰えば穴掘って埋めるだけの仕事でも喜んでやりそうだな。 >>507
正社員www
あの書き方で正社員だと思うかね。
>>505と併せて考えれば普通にフリーと分かりそうなもんだが。 >>510
で、何ができたんだ?
説明できないから穴掘りとかではぐらかそうとしてるのバレバレだよw
>>511
えっ、フリーだと激安だろw
なんでそんなの書いたんだ? ブックをコピーするボタンを設置したくて
単純に
ActiveSheet.copy
msgbox "コピー完了"
にしてあるのですが
シートが6つある中で特定の2つのシートでそのボタンを選択すると
このシートはコピー不可 みたいなダイアログだしてコピーをしない
その他の4つのシートでは選択すると今まで通りにコピー
みたいな設定って可能でしょうか
すみません。 よろしくお願いします
AというブックのA1セルの値を
BというブックのリストというシートのA1からA500までで検索をし、
一致した値がある場合は同列のC〜F行の値を取得し
元のAブックのC1〜F1に貼り付けるVBAを
ご教授ください 今どこまで出来てるのかソース貼って
それと1個見つかったら2個以上あっても処理終了? >>513
activesheet.nameでシート名取得し条件分岐
またはボタンを消す >>513
s = ActiveSheet.Name
Select Case s
Case "Sheet3", "Sheet6" ' コピーできないシート名を並べる
MsgBox "コピー不可"
Case Else
ActiveSheet.Copy
MsgBox "コピー完了"
End Select >>513
そのシートのボタン消せばいいんじゃないのか >>517
出来ました。本当にありがとうございます。 >>512
本当に分かってないとはw
調査費用と時間貰ってドキュメント起こすことになっても四苦八苦は変わらん。
お前はバカだから金と時間そ貰えればただ穴を掘って、その場でその穴を埋めるだけの仕事やらされても喜ぶかもしれんが、金や時間貰っても糞コ一ド読まされるのは普通の奴にゃ苦痛なんだよ。 >>512
フリーだと激安だってwww
本当に何も分かって無いんだな。
VBAの場合は月70万も行けば良い方だ。 >>521
> 調査費用と時間貰ってドキュメント起こすことになっても四苦八苦は変わらん。
ゴメンな、糞会社はそうなんだろうなw
>> まともな会社なら受ける時に調査費用と時間をもらってドキュメントを起こし直す
まあ、そもそもまともな会社は
>>522
>> 日本語の理解力がないのかな?
>> 自慢にもならないことをいちいち書くとかバカじゃね?
まさかと思うけど3,000円/h相当の俺スゲーとか思ってる?w すまん途中で送信しちまった
>>521
> 調査費用と時間貰ってドキュメント起こすことになっても四苦八苦は変わらん。
ゴメンな、糞会社はそうなんだろね
お疲れ様
>> まともな会社なら受ける時に調査費用と時間をもらってドキュメントを起こし直す
まあ、そもそもまともな会社は他社の糞コードの保守なんて滅多に受けないし
で、何ができたんだ?
>>510では過去形だけど>>325では今まさにやってることになってるけど、偶然この一週間で終わったのかな?
ますます辻褄合わせが大変になってるぞw
>>522
>> 日本語の理解力がないのかな?
>> 自慢にもならないことをいちいち書くとかバカじゃね?
まさかと思うけど3,000円/h相当の俺スゲーとか思ってる? こういうのってこうやって段々長文になっていくよなw 客は選べない
クソな仕事でも黙々とこなすやつが結局は上に上がってく
文句ばっかり言うやつはそこまでの人間 >>523
プw
他人の書いたプログラム見たことすら無いとはw
まともに開発に絡んだことがあれば100人が100人他人のコードなんて読みたく無いんだよ。
引き継ぎという言葉も知らない、ググることも出来ない、保守という仕事が何をやるかも分からない。
二―トが背伸びは恥の元だぞ。 3000円/hが自慢?
何を言ってるんだ?
3000円/hは最低限の話だが。
アホだからそこに反応する。
2000円/hが主題だと言ってるだろうに。 >>526
客は選べない。
クソな仕事でも黙々とこなすやつが結局は上に上がってく
文句は客のいない所で発散する。
当然だがね。 たびたび済みません
元のVBAのフォーマットから
新しいブックをコピーを教えて頂いたのですが
コピーする度に1回目にコピーしたブック内のシートの右に足されていく みたいな設定は可能ですか?
具体的に言うと4月分をコピー
その次に5月分、6月分とコピーすると
初回(4月分)にコピーしたブックのシート右に足されていく
さらに欲張ると元のフォーマットで4月とか5月とか特定のセルに入力した文字がそのままシート名になってくれる
すみませんがやり方ありましたら御教授を宜しくお願いします。 >>527-529
指摘されて顔真っ赤になって3連投とかw
> 3000円/hは最低限の話だが。
自ら最低限を認めるとか偉いやん
で、なんでそんな恥ずかしい金額をいきなり出してきたんだ?w >>514
例えばA!A1にリンゴっていれると単価だか購入数だかをB!から拾ってきてA!C1〜F1に入れる感じの物?
多分VBAというよりエクセル関数VLOOKUPで済む話かと
VLOOKUP(A!A1, B!A:F, 3) 社内システムで書類となったものの特定の場所の値とエクセルの上の特定の場所の値が合っているか照合したいです。
そういったマクロ組む場合
1. 書類をスキャナーでpdfにする。
2. pdfをocr機能使って照合に使うシートとは違うシートにデータ転記。
3. 2.でデータ転記したシートの値と確認元のシートの値を照合する。
というのがぼんやり浮かんでるんですが、1-3までの流れでよりスマートな方法があるなら上の流れをどう変えたらいいか教えていただけませんか?
よろしくお願いいたします。 マクロで何とかなるスキャナーやOCRならいいんじゃないの? >>532
日本語、ダメ過ぎwww
ここまで壊滅的に日本語出来ない奴は仕事も出来ないからニートになるw
"引き継ぎ"で恥かいたからってむきになるなよw 今度はニートとか言い出したぞw
恥ずかしい奴
>> 結局説明できなくなって理解力ガーとか低能が逃げる時によくやる手で笑うわ >>534
OCR読み取りまでできるなら転記とかいらんけど
社内システムに、その数字をシステム的に参照できるAPIを準備してもらえよ >>535-538
csvファイル関連のapiもかなり時間かかったので開発をつついてみます。
ocr使ってデータ転記しないと私の能力と使えるソフトやapiでは座標指定ができないから回りくどいやり方するつもりです。
今のところGoogleクラウドのocrがapi公開してるからそれにしようかなとぼんやり思ってるとこです。
アドバイスありがとうございました。 >>537
最低限ってのは俺が受けるとしたら最低限3000円/hは貰わないと受けないという話。
こんなの分からないのお前以外いない。
これまでのやり取りも酷いし、"引き継ぎ"についても分からない。
致命的だよ。 >>537
あと、その変な引用とアンカ―どうにかならんのか? >>540
> 最低限ってのは俺が受けるとしたら最低限3000円/hは貰わないと受けないという話。
まじで言ってるのか?
勤め人ならそれでいいけどフリーだと税金や年金とかも自己負担だからやり始めた時ならともかく普通は5,000円/hでも不安だよ
> これまでのやり取りも酷いし、"引き継ぎ"についても分からない。
そういう御託は…
で、何ができたんだ?
>>510では過去形だけど>>325では今まさにやってることになってるけど、偶然この一週間で終わったのかな?
にまともなレスできるようになってからほざけよw
>>541
どこにアンカーがあるんだよw
あと>>の意味もわからんとか馬鹿すぎる おまえら能ある鷹は爪を隠すってことわざ知っているか? ここは質問スレ
ルールを守らないやつには誰も仕事なんか頼まない CSVはComma Separated Valueの略ですが、
Commaはわざわざ略さなくても、既に,があるんだから、そのまま,SVでいいと思うんですよ。 で、VBAの質問なんですが、何にもないプロシージャって、何か使い道はありますか?
普通は全然意味ないと思うんですが、なんていうか0番スプライト的な感じで。
Sub Test()
End Sub >>547
TXT,,SVより
TXT,CSVの方が誤読しにくい 誤読とか以前にわかりにくすぎるわ
一体何がいいのか 今さらcsvの命名にケチつけるなんて、極論が好きな反抗期なんだろ
中身のないプロシージャの意味とか、それ質問する理由も書かないしな >>542
バーカw
VBAで5000/hの仕事なんてあるわけ無いだろw
ニートはこれだからw
御託?
お前が"引き継ぎ"という言葉の使い方について反論出来なくなっているわけだがw
反論あるならどうぞw
>>510での過去形について、分からんのか?
レスもまともに読めないのか。
>>477を読めw
引用に>>使うアホはいない。 木曜日にワッチョイが切り替わるんだよなあ
めんどくせえ > 今、他人のそういうコードで四苦八苦してる。
↓
> ついでに言っとくと、正直に言えばたった今じゃねえ。
> 2週間程度前の話だ。
なんだそのバレバレな言い訳はw
流石に恥ずかしくないのか?
そもそもそれが本当だったとしても>>476の
> 出来てるから今、四苦八苦してるんだが。
が意味不明なのは変わらんし
何ができて、何に四苦八苦してるのか書いてみ
> 引用に>>使うアホはいない。
まじでわかってないのかよ…
自分自身への引用を明示してるだけだぞ
馬鹿すぎるわ VBA質問スレで必死になるのはちょっと恥ずかしいよなあw >>555
日本語勉強しろw
言い訳?
何を言ってる?
何の言い訳だよw
四苦八苦してる(た)ことに何も変わりはないぞ。
これのどこが言い訳になるんだ?
2週間前に四苦八苦してたとしても、こういう掲示板で発言する時は今四苦八苦してると発言することは十分あり得ると>>477で言ってる。
発言の主旨が変わらないからな。
そして、それがお前に何か指摘されたとか、自己弁護の為に言っているわけじゃないことは時系列から明白。
言い訳? >>555
解析する時間もドキュメント作成する時間も費用も貰っているが他人のコード解析するのに四苦八苦してるんだがね。
これのどこが変なのかさっぱり分からん。
何ができて何に四苦八苦してるかの前に、お前は俺が何が出来てないと思ってるのか言えよ。
今までの話じゃ、お前の主張は解析する時間、ドキュメント作成する時間や費用を貰うと四苦八苦することが無くなるということのようだが、そんなこたあねえぞ。 自分自身への引用でも>>なんて使わん。
>で十分だし、普通。 >>558
ドキュメント作成してるのに四苦八苦してるなら役に立たないドキュメントを作ったお前がアホなだけだけど?
あと、せめてレスを1つにまとめろよ
なぜかバカは同じ内容に複数レスで返すんだよな
まあ低能にまとめる能力を期待しても無駄かなw >>559
バーカw
先にお前が、俺の何が出来ていないと思ってるのか説明しろ。
お前が俺の話のどこが理解出来て無いのかはこっちにゃ分からんのだよ。 >>560
自身のレスとお前のアホレスを混同されたくないだけw >>561
バカ?
本当にバカ?
解析してドキュメント作るんだよ。
解析に四苦八苦してるんだぞ。
嗤えるわw >>563
そんなもんは内容でわかる。
というか、むしろ邪魔で分かりにくいから>>541で指摘してるんだが。 >>562
アホなの?
>>476の「できてるから」の説明しろって話
自分で書いたことも理解してないのかよw >>567
だから、金と時間を貰ってるというのが出来てると言ってる。
やり取り理解出来てる?
お前の指摘はまともな会社なら金と時間を貰ってるというものだった筈だが。 最低限、やり取りから解析に四苦八苦してるというのはまともな奴なら分かる筈なんだが。
とすれば、お前の言う金と時間を貰って、今まさにドキュメント起こす為の解析中(だった)なのが分かる筈。
これが前提なんだからドキュメントが既に出来上がってるなんてアホな誤解してたことは無いと信じたい。 >>566
専ブラで引用の引用したことないのか?
まあその手の文句は専ブラの作者に言ってくれ
>>568-569
> だから、金と時間を貰ってるというのが出来てると言ってる。
あれ?
> 調査費用と時間貰ってドキュメント起こすことになっても四苦八苦は変わらん。
って糞ドキュメントしか作成できないアホって自白してますけど?
発注した客可哀想
まあ脳内だろうから問題ないか…
> やり取り理解出来てる?
うん、どんどんボロが出てるねw >>572
???
ドキュメント作るための解析に四苦八苦してるのと、出来たドキュメントの出来に何の関係が?
お前がドキュメント作ったこと無いのがこれでバレたw 何か、お金と時間貰うとロボットが勝手に解析してドキュメント作ってくれると思ってるアホがいるようだ。 というか、解析に苦労しないんだったら、糞コードなんて言葉は無い筈なんだ。
どんなコードでも誰にでも理解出来て楽に読めるんだったら、綺麗なコードを心がけるというモチベーションすら起こらない。 >>572
あと自白っていうのがこれまたおかしい。
最初の主張通り、何ら矛盾が無いんだから自白じゃ無いだろ。
それとも、まだ理解出来て無い? >>573-574
え゛っ、まじでドキュメント作成で四苦八苦してるって事で誤魔化せるとか思ってるの?
> 調査費用と時間貰ってドキュメント起こすことになっても四苦八苦は変わらん。
そうすると何が何と変わらんのか説明できないだろw >>575-576
レスをまとめることもできない無能
しかも内容スカスカw >>577
えっ?
何度も言ってるのにまだ分からない?
「解析に四苦八苦するのは、時間とお金を貰っても変わらない」という日本語が分からない?
時間と金を貰って無くても、貰ってても、どっちでも四苦八苦はするという意味が理解出来て無かった?
日本人ですか? 日本語が通用しない程だから始末に負えない。
"引き継ぎ"も碌に理解してないぐらいだからな。 レベルの高すぎる人同士での口論はとてももったいない
俺はIf Then ElseとFor nextは辛うじて理解できそうなレベル
Do untillとかNextとかloopとか使いこなしたい条件が山ほどあって泣きそうだけど
ここの上級者たちは独学で覚えた?
同じ事やろうと調べでもどのサイトもいろんなやり方でどれが良いかも分からない
ここで聞くとさらりと答えだしてくれる人ってどういう頭の良さしてんだろ 基本的には場数
よい文章を書くには良い文章をたくさん読め
良いプログラムを書くためには良いプログラムをたくさん読めば良いんだが
まあ、よいプログラムをたくさん提供してくれる場がなぁ >>584
ここ見てけばまぁ覚えやすいとか無難で間違いないとかそういったサイトありますか?
広告たくさんのサイトだろうが藁にもすがりたいほど身につけたくて…ノイローゼ気味
俺の業務に絞った時にVBAで何でもやらせようと無理せずに関数はエクセルである程度制御した方が後々メンテが楽なのがわかったので
恐らくloopの使い方を理解しないと絶対に乗り越えられない大きな壁が。。
それを作れたら後は数値の変更や応用でいけそうだけど脳が焼き付いてる >>583
本当にレベルが高い人は口論なんかしないんだよ
スレを荒らすのはだいたい無職 >>585
本買え
初心者むけのをまず数冊
昔はプログラム系の雑誌結構あったんだがなぁ >>583
VBAの本って多いから学習しやすいはず
プログラマなら他言語の経験から
基本的な制御構文くらいは自然と分かる
VBAはプログラム言語としてはやさしい方 まずは何をしたいか、エクセルでこんな便利なのを作りたいとか、ヴィジョンをもてれば上達は早いと思う そうだね
エクセルは小物ツール作りやすいから
実益を兼ねた練習を積めば上達するな VBAなんて本腰入れてテキストで勉強するにはコスパ悪すぎる言語だと思うが・・・
「VBA」にやりたいことを付けてググったソースをコピペした方が早くないか? 本を見てプログラミングを勉強する時代は終わりだと思ってる
紙の方が読みやすいと思う人が多いだろうけど、本格的にやろうとしたらオンラインのドキュメントは必須だし、
画面上で文字を読む訓練をして慣れていかないと、いつまでも能率が上がらない >>592
とりあえず動くものが作れればいいというなら、まあそうだな
>>593
学習リソースとしては、本かWEBかに本質的な差はないと思うが
中身の問題で、WEBは本ほど系統立てて編集されていないところが多いと思う
辞書だけで外国語マスターできるような人ならWEBだけでもいいけどな >>592
>>593
書籍の学習は今でも必要だと
思うしさらにVBAだけでなく
他言語の経験があるといいな
VBAのスレで言うのも何だが
VBAプロパーのプログラムは
垢抜けない泥臭いのが多くて
その辺PHPと同じ感触がする >>531
どなたか…四苦八苦して終わりません、、
お時間ある方がいましたらお助けを >>596
そうだな、取りあえず質問する時に相手に伝わるか考えながら質問した方が良いかな。
>元のVBAのフォーマット
???
これは何のこと?
何を言ってるの?
シートのコピーで書式だけコピーしたいということ?
だったらそんな機能は無いと思うから、あとは工夫でどうにかする。
Rangeの書式だけコピーはあるから、シートの追加と書式だけコピーの複合にするか、俺ならそもそもコピー元の書式を全部コードで実現してシ一トの追加とその書式を実現するコ一ドでやる。
右に追加というのが特定のシート(4月)の右というならコピーだろうがシートの追加だろうがそのものずばりの引数がある。
WorkSheets.Copy、WorkSheets.AddでクグるとMSのぺージが見つかるから、そこにサンプルもある。
一番右に追加していくというなら、上の特定のシートの部分に最後のシートを指定すれば良い。
最後のシートってのはシートの指定方法は名前と番号の2通り有るので、今回は番号で最後を表現する。
最後ってのはシート数が7個あれば7番目になる。
この場合の7個ってのはシートの個数。
シートの個数はこれまたそのものずばりのプロパティがある。
(これも上のページのサンプルそのもの。) >>531
5回読んだけど理解不能
画像や絵使って説明してほしいわ 他の人は知らんが俺は独学でコマンドマニュアル見たり参考書買ったりしてた
例えば数値でも加算を繰り返してどこでエラーがでるかとかを
実際にサンプル作って実行することをひたすら満足いくまで繰り返したりしたな
学校の勉強と並行してやってたからいつも寝不足だったし >>594
学習するのに何が効率いいかっていうよりも、
VBAを学習すること自体に対するリターンって意味でコスパが悪いと言いたかった
特にオフィス製品上でしか実行できない、やりたいことは単純な事が多いっていう特性上、
学習することでググったソースのコピペ以上に得られる物はあるのか?と。
内容を理解することでちゃんとしたコードが書けるってメリットはあるかもしれないが、
VBAで綺麗なコードを書けてもねぇ・・・
VBAのコードを拘るリソースは他に回すべきだ 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人、本当に課からいなくなって現場に飛びました。
効率化しすぎて他でも応用できるようにしろと皆の前で大声で怒鳴られ泣けても知恵が出てこない
ゆっくり本読んで覚えていきたいにもまず最優先で作れと室内であんなに大声で怒られて
ネットで調べても調べ方すらわかっていなく
異動したい、何卒すみません >>601
普段の仕事がExcelならコスパいいだろ 一から十まですべて教わらないとできないような人はやめたほうがいいわ
実力以上のコードを教わったところで何も応用できず周囲の期待には応えられない
5chで教えてもらって作りました
これ以上は分かりませんって正直に言えばいい ForをDoにして、NextをLoop Until S=""かな
つか、二人分の人件費が浮くような作業なら、ちゃんとした会社にシステム化たのめよ まあこれで動いたら>>602がさらなるドツボにはまるのをニヤニヤしようぜ 効率化して上司から怒鳴られるってどんな職場だ
上司がクソすぎ 画像上部の21〜20日間隔の日付のセルの塗り潰しを下の1〜30日間隔の日付に塗り潰し変えたいんですがどうしたらいいですか?
・上部をforで2行目の最終列までループ
・ifで塗り潰し判定がTrue
・???
・???
・下部をforで2行目の最終列までループ
・ifで対象年月日間隔だったら塗り潰す
と、こんなイメージなのかなと思ってはいるんですが、??らへんの処理がわかりません。
https://i.imgur.com/I6hiP5r.png Functionの任意引数(Optional)なのですが、初期値はstringかlong型のみだけしかダメなのでしょうか?
シート名objectの引数で、省略したときにActivesheetを返したいのですが、「定数式が〜」のエラーが出てしまいます。
やはり、IFとIsMissingを使うしかないでしょうか。
Function test(Optional objシート名 As Worksheet = ActiveSheet)
End Function >>613
規定値に使えるのは定数値だけ
変数、プロパティ、関数などは使えない
だからActiveSheetも対象外 >>611
その画像で説明すると、D3:K3をコピーしてC10:J10に書式貼り付けするだけでは >>611
D2からK3をコピーしてC9に貼り付けて C2をK9に貼り付けるだけじゃないの?
VBA使わない方が早そうなんだけど >>611
塗りつぶす条件がわからなければわからない >>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 >>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 >>615
そうなのですね、ありがとうございました。 >>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 >>616
>>617
名前は下にたくさん羅列してるし、日付も右にもっとずっとあるからVBでやりたい。
日付間隔が上下で違うからどうやったらいいかと思って。
for 上部名前シートループ
for 下部名前シートループ
if 名前同一
for 上部名前年月日列ループ
if 塗り潰し
※下部シート塗り潰し
end if
next
end if
next
next
※の部分がどう書くのかがわかりません。
>>618
塗り潰す条件は同じ名前の人に対して同じ日付の所へ塗り潰す。 >>623
上部のD列から見ていって塗ってあったら下部の一つ左の列を塗る 下記のコードで出力範囲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 このスレにくる質問見ると、俺に読解力がないのかなといつも思ってしまう >>626
VLOOKUPは答えを複数返す関数じゃない あ、質問の意味が今わかったわ
入れるセル変えずに関数の列番だけ変えてたらそりゃ同じ値しか入らない
中身がどうなってるか想像じゃなくて実際に確認すればどう直せばいいかわかるだろう 質問が説明不足だったようで失礼しました
出力範囲が複数列ある場合にそれぞれの列を「出力範囲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行書かずに変数で処理できないでしょうか、というのが質問の意図です だから>>626のループの中身がどうなってるか見て順番考えたらいいんじゃないの >>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
みたいな感じで、変数を使えば、何十個あっても簡単にまとめられる 馬鹿ばっかり来るところにいるからじゃね
ってか自力でできるやつは質問なんかしないだろ >>635
それググレカスキッズだと思う
>>612 複数あるコマンドボタンをどれを押しても一つの処理に入り、押されたボタンを取得して、ボタンごとに判断処理ってできないのでしょうか。(activeXです)
具体的にはシリアルポートの処理で以下のことをやりたいです。
コマンドボタンが機器名、その機器ごとに存在する複数のコンボボックスにポート名やボーレートを設定。
あるコマンドボタンを押したら、対応するコンボボックス郡の設定を取得してポートを開く。(ポートオープンはモジュールに記述したWritefileでやってます)
ポートオープンで返ってきたハンドラが例外でなければ、押されたコマンドボタンの色を変更し、名前を"機器名+接続中"に変更。
また、コマンドボタンを押した時点で対応ポートのハンドラが存在すれば、そのポートを閉じて(ハンドラも初期化)、押されたコマンドボタンの色を戻す。
現在はボタンごとのプロージャを作成し、同じような処理を逐一書いてますが、機器が複数あって大変見にくいのと、記述が大変なのでまとめたいです。 >>637
それ、まともにやろうとするとかなり上級レベル。
上級者を自認する人でも出来ない人が結構いる。 >>637
「コントロール配列」でぐぐれ
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_100_040.html >>637
同じような処理なら、ボタンクリックのイベントの中で変数にボタン名を設定してから、別に用意した共通部分のSubを呼び出せばいい
ヒント
http://woodbook.kir.jp/excel/vba/button_row.html ありがとうございました
手っ取り早くやれそうな感じではなさそうです >>639
懐かしいなコントロール配列
昔はよく使ったが最近使ってないな >>642
一応言っておくと、途中迄なら出来るかもしれないし(それで十分かも)、読み物としても読んどくと良いと思う。 >>642
紹介頂いたサイトの大元になるmougを参考にして押したボタンの色変えぐらいまでしかできません
この処理にシート画面上のコンボボックスの値を関連付けて取得する仕掛を入れたいのですが検討つかず 各ボタン押した最初の処理だけわけて
引数つけて共通処理に飛ばせばよくね 全部ここの人達のおかげで完全に憑き物が取れて教えて貰ったURLと持ってる本を参考にひたすら初歩のルールから愚直に
打っては実行を繰り返し練習してます
Do loop
For next
特にこれの破壊力は凄いですね
これだけの為に覚える価値すらあると感じました
あとはmsgboxの使い方の面白さ
感謝しかないです
Do loopでwhileとuntilがあるけどよほど複雑でない場合
書き方変えるだけで同じ処理させられる感じですが
基本どっちかでで使い方覚えていったほうがいいものですかね
質問というよりただただ楽しくここの上級者たちにも癖だったり自分ルールがあるのかなと
ああ楽しい >>647
繰り返す条件が明確な場合はwhile、終了条件に着目した方が処理の流れがわかりやすい場合はuntil
適切に使い分けると、プログラム全体が読みやすくなって間違いが減る よくない例
While Not 終了条件
適切な例
Until 終了条件 >>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
なるほど、空白になるまでループってのを練習してました
後者の方が一般的ですかね
勉強になります。 僕は wihle しか使わない
理由は c言語にないから
あと、なんとなくだけど、wihle と until は混ぜて使わない方がよい気がする
いや、混在する人がいても文句は言わないと思うけど >>651
651 ですが、
理由は until はc言語にないから
です
すみません ド・モルガンの法則なんてのを知ってるとループ条件が
劇的に易しく書けるようになったりするよ >>653
ドモルガンは法則ではなくて公理すなわち前提条件なのでは? Not Is Nothing
英語の否定文って日本語とロジックが違うから直感的にわかりにくい 少なくとも一回実行する必要があるとき until
一回も実行しないかもしれないとき while まぁ大事なのは自分の中でしっかりルールを固めておくこと
なんとなくで使い分けてると100%デスマに陥る >>656
VBAでは、それはDo側に書くかLoop側に書くか
WhileかUntilかはその条件の意味的なもので使い分けるのが本筋だろうけど
書くときの話ならどちらかに統一するルールでも良いと思う シート1のA1セルにx1、x2、x3と設定し、このx1〜x3をそれぞれx1をB1セルに設定されている値、x2をC2セルに設定されている値に置換するにはどのようにすればよいのでしょうか
Replaceでは検索文字列および置換文字列を一つずつ指定できないため、検索したい文字列が増えるたびに処理が無駄に増えてしまうように思うため効率的なやり方を教えていただきたいです 学習能力のないひとがやってきて
説明能力の貧弱さを露呈する場所か・・・ >>647
IF文、For文と配列で簡単な処理はこなせる
上級者はまた別のパラダイムで書いているが
先走る必要もなく基礎を確実に身につけよう
>>654
ド・モルガンは定理になることが多いが
そうなるのは公理系しだいだから
名前がおかしいと感じたことはない >>659
x3をd3に入れる
置換にこだわらず、代入しなおす ワークシート名をsheet(i)みたいな感じで配列に格納して、
for i=i to X
sheet(i).cell(row,col) = data
next
の様な、ループで各シートのセルに値を代入する方法を教えていただけないでしょうか。 >>667
実際の要件知らんが、普通はもっといい方法があると思うが、質問通りに。
https://i.imgur.com/SdMgpZq.png Dim i As Integer
For i = 1 To 3
ThisWorkbook.Worksheets(i).Cells(1, 1) = 1
Next i
で済むようなものだと予想 ・ツールの作成
・バク対応、修正業務
・各種テスト
VBAを用いて上記の業務を行う場合、皆さん(自分の取り巻く環境以外)の現場で求められる頻度や重要度が高いスキルや業務を伺いたいです。
よろしくお願いします。 >>667
何でシート名で配列なの?
既にシートオブジェクトの配列として使えるのに。 >>667
シート名は普通に列挙したいんだと思った
コード内に記述したいのか: sheet=Array("hoge","fuga","piyo","puyo")
セル内に記述したいのか: sheet=WorksheetFunction.Transpose(WorkSheets("hoge").Range("a1:a4"))
どうか、わかんないけど >>670
そいつは現場次第だよねえ。
現場に併せて何でも出来るってことかな。
AccessならSQLは必須だと思うけど。 >>671
生きる!!!
>>674
自分の周り以外だとどんなことにVBA使ってるか気になりましてね。他意はマジでなくて、単純な興味として質問してみますた。 既存のVBAをどうしてもメンテせざるを得ないときに使う
新規に使うことはない ちょっとデータを加工したい時、軽い処理とか1回限りの計算はVBAでやってる
VisualStudioはその場限りの捨てコードを書くには大げさすぎる >>677
そんな貴方にPowershellオススメ >>676
>>677
レスありがとうございました。
ちょっとした作業を手軽に(環境構築とかなしで)効率化するときに使ってるってのが分かりました。
何気なく使ってるから頻度も重要度もクソもないと 昔は「値で貼り付け」とかキー割り当てしてたけど最近のは割と便利になったから使ってないな
他には初回印刷日の挿入とか
ファイルプロパティにタイトルの設定とかかな 「値で貼り付け」に関して最近のはどう便利になってるの? >>684
相手は誰だ?
ワークシート? Dictionary? CSV文字列? >>680
自分の素朴な疑問に答えてもらってありがとうございます。 ここの人ら凄い、
いつも感心しながら読んでるけど本当に勉強になる。
これだけ知識や経験あるならユーチューバ―とかになって上手くやれば副業も出来そう >>684
処理したい変数がたくさんあって繰り返し同じことをする時
処理したいセルがたくさんあって繰り返し同じことをする時 office田中もいつのまにかyoutuberになってたけど、こんなおじいちゃんだとは思わなかった VBAを本を読んだりググったりして勉強中です。
他社システムからいただくCSVファイルをExcelに取り込んで編集する必要があります。
頭にゼロが付いて、長さが不定の数字のフィールドがあるので、そこは文字列で
扱わなくてはならず、そのままExcelで開けません。
querytables.add でインポートしてみたところ、セル内改行の含まれる列があるため、
1行であるべきデータが2行になってしまいます。
POWERQueryを使えば回避できる、という情報にに突き当たり、とりあえずマクロの
記録をしてみて、使えるように変えられないか、と思いましたが行き詰っています。
「ソース = Csv.Document(File.Contents(””CSVのパス””),… 」
のCSVのパスの部分を変数にしたいのですが、変数にすると
「 .Refresh BackgroundQuery:=False」のところで
[Expression error] インポート 変数 がエクスポートと一致しません。モジュールの参照が漏れていませんか?」
と親しげだけど、冷たく突き放されます。
知識が足りなさすぎるのですが、データをきれいにして早く次の処理を作らなくては
いけなくて焦っています。
先輩たちはテレワークで、あまり質問もできず困っております。
どうぞよろしくお願いいたします。 >>689
再生数少ないけど分かりやすいから初心者は見るべきだと思う
schooのは微妙だけど >>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 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
何とか練習しつつ
ここにきてデータ型が逆に混乱してきましたわ
バリアントでごまかそうかな
おやすみなさい >>693
これ、そこらの入門書にはなかなか書いてないんだけど、MsgBoxの結果はVbMsgBoxResultという特殊な型なので、変数msはこう宣言するのが正解
Dim ms As VbMsgBoxResult
この宣言を書いてからコードを書くと、
If ms =
ここまで入力すると自動的に、vbYesとかvbNoなどの選択肢が出てくる 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 >>689
VBAは年齢層高いだろ?
Pythonとかより 最近csvを開くのがはやってるみたいだけど、拡張子をtxtに変えて開き直すといいよ >>684
速度アップの為にあえて使うのはVariant配列。
配列にすることに全く違和感が無いので、"あえて"使うことが少ない。
配列にするのに自然なことがたくさんあるし、普通に使ってる。 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 ここで教えて頂いた>>703の「指定Path内の全txtデータのF列2行目から下に数値が続く限りシートに全部抽出する」コードのお陰で憑き物が取れて運用してるのですが
たまに画像の様な他の列に行がはみ出したデータがあると
実行時エラー'9':
インデックスが有効範囲にありません
で止まりますが
これを「他の列がどうだろうがtxt内のF2から下に数値が続く限り抽出」
に改良するのは難易度高いですか?
というかコードで可能でしょうか
入門編の本には載って無く数字変えたりwhileの位置変えたりしてますが簡単にいくはずもなく
参考になるサイトなどありましたら教えて頂けませんでしょうか
↓こんなデータが混じってるとエラーで止まります
https://i.imgur.com/194ePDL.jpg >>703
まんなかへんのdo while の後ろはかっこをつけたほうがいいよ
判定の対応がわかりにくいので >>689
元々有名な人なんだね。
投稿動画多くてあれこれクリックしてるうちにどんどん登録者数が伸びてったからビックリした。
最初見た時は5000ぐらいだったのに、さてどこまで伸びるかな。 >>704
>If s <> "" Then Cells(r, c) = Split(s, vbTab)(5)
この行、最後に(5)ってついてるでしょ
読み込んだデータに5+1番目(0スタートだから+1)の要素が無かったら、どうなると思う?
ここは、splitの結果を一旦配列変数に受けて、配列の大きさを確認する判定をいれるといいよ
実を言えば、s<>"" の判定も不要だったりもする 都道府県別の7日移動平均線を出すグラフ組めないかなあと
思って、「都道府県別の日々新規感染者数」を探したけど見つからん…。
なんで役人は pdf にしたがるんだろう。 >>707
正直ほとんどさっぱりわからないです。
が、ありがとうございます。そこらへんをいじればなんとかしろなりそうってことですかね。
まだ変数の使い方もよくわかってないのでsplit関数で検索して集中的に勉強していじれるようにがんばります。 >>706
VBAはハードル低くて
エクセルが実用的だから
ユーザが多いんだろう データは、PDF じゃなくて、アプリで処理しやすいように、
同じ場所に、CSV ファイルも置いておくのが基本!
役人は、データ処理の素人w >>708
各都道府県毎にオープンデータでCSV配布してるのに何言ってんだ? 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 >>714
こうかな?
Set mailItemObj = oApp.CreateItem(olMailItem) >>715
レスありがとうございます。
「変数が定義されていません」エラーが出てしまいます・・・ >>714です。自己解決いたしました。
olMailItemを値指定でゼロ(0)にしたらできました。。。
謎ですが。。。ありがとうございました。。。 定数ってoutlook.olMailItemみたいに書くんじゃなかったっけCreateObjectで別定義する必要があったはず
Excel上だとリファレンス入れないと>>715は機能しない ただのパラメータ定数参照だから普通に数字を入れればいいだけ
olMailItemは0だったかな >>690です。
みなさんありがとうございました。
もっと勉強します。
>>696
ちょっと楽しい気持ちになりました。恩に着ます。 msgboxの使い方
inputboxの使い方
Do loop
For next
if then else
初歩だけどここらを色々繰り返し勉強してると楽しい
msgboxは使い方もっと応用していきたい
楽しみながら勉強するといいですね
他にもっとお勧めの処理ありますかね。
あとさらに低レベルな疑問なんですが
vbYesNo
vbOkCancel
↑
これってみんな細かに使い分けます?
タイトルとメッセージで誘導してあげて
elseで何もしないにするとほぼ通じちゃいますよね
これも使い分け必須だったりするのでしょうか メッセージBOXが出ている状態でESCキーを押された時の挙動が違う。 vbaって必要に迫られてやることが圧倒的な気がする
だからおすすめの処理とか言われてもな 同意
VBAは使わなくていいなら使わない方が望ましいわけで、
おすすめと言われると「まずはVBAを使わなくてよい方法を考えること」としか言いようがない 道具なんて使う人次第
手作業とワークシート(数式)とVBAと別アプリと、何でやれば一番楽で間違いが起きにくいか比較検討して使い分けるのが理想 >>722
きびしめの意見が続いてかわいそうになったので
めげずにがんがれ 数式だとすぐぶっ壊されてその修正に手間がかかるのでVBA使うのが好き
仕方なく数式に頼ったとしても、数式を一括修正できるボタンとかVBAで作っちゃってる
数式入ってるセルに保護かければいいじゃんって思うだろ・・・・
そうするとな、なんでここには入力できないんだよ!ってクレームがな、
いや、そこはここのシートのこの値が転記されるようになってて・・・とかいう説明を聞き入れる輩じゃないんだ 人に渡すブックなら、VBAは消してシートはバックアップを取っておく
何やったっていじるやつはいじるし文句を言うから、結果だけを渡すようにしとかないと >>722
>お勧めの処理
VBAが初心者でも簡単に扱えるのは
エクセルというGUIがついてるから
だけど普通のCUIプログラミングも
できると技術的に幅が広がるだろう
たとえばPythonとかRubyとかでね >>730
>>731
複数人利用で関数メインだと
すぐぶっ壊されるのは分かる
あと壊れなくても長期的には
VBAの方が修正が楽だよな?
関数は処理の全体像が不透明 まぁ関数でできる処理は関数でした方が処理自体速いんだけどな
悩ましいけどセル保護だけじゃなく列や行を隠しとかもするけど、いじる人は何しようと結局いじるからね…
VBAと関数で使い分けしないとVBAはどんだけCPUのコア数あっても1コアでしか動作しないから、重たい処理になると頭打ちになる ワークシート関数が処理の全体像が不明っていってる奴はたぶん関数がセル内できるのを知らないとか、テーブル機能を知らないとか、たぶんそんな感じだろう
ワークシート関数もVBAも下手くそに作ればカオスになる なるべく関数はエクセル内で完結させてる
何かの呼び出しや処理のみにVBAにやらせてる
マスター版を個人で持っておく
いじられてもよほどのことが無い限り知らんふり 一年後に処理の内容全部忘れてから
もう一回見てご覧?
関数よりVBAの方が分かりやすいから ワークシート関数の見通しが悪いのはシートの使い方や関数の書き方が悪いから
テーブルで構造化参照させる
多重ネストをしないように作業列を積極的に使う
多重ネストが避けられない場合ははセル内改行する
静的変数として固定セルを参照する場合は名前付きセルにする
こういう配慮をしているかどうかが大切
可読性はVBAと大差ない
VBAだって下手に書くと二度とメンテナンス出来なくなる >>737
VBAだけ見りゃ理解できるように書いてあるんならいいさ
ハイスキルな君の書くVBAもきっとそうなのだろう
ただ、世の中のほとんどのVBAマクロはワークシートのレイアウトに激しく依存しており、
シートと見比べないと意味不明だし簡単に壊れる >>713
そうなの?じゃあ俺の検索力不足だ。
教えてもらえるとありがたい >>744
この人タイでエッチするため在宅プログラマーになったって言ってるけど
うらやましいな 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初心者です
上記を実行すると強制終了してしまいます
どうしてなんでしょうか? >>747
Exit Forを消す
あと、自分のミスで思った通りにならない時は強制終了とは言わない 学術巨大掲示板群: アルファ・ラボ
ttp://x0000.net
物理学 化学 数学 生物学 天文学 地理地学
IT 電子 工学 国語 方言 言語学 など
PS 連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0 >>747
回答としては748の通り
なぜこうなるのかわからない場合
・ブレークポイントを使ってどういうふうに処理が進んでいるか確認してみ?
・気になる行をコメントアウトをしてみる
などをするがよろし >>753
Welcome to the real world !! >>747
単純にすべての単語の意味を
把握したらそれだけで分かるよ?
最初の内は意味が分からないまま
コピペプログラミングだろうけど
ずっとそのままだと上達しない 皆さんありがとうございます。
初心者から脱出できるように勉強します IE自動操作のマクロで
今まで動いていたが動かなくなる
↓
コードに変化を加えると動く
(スペースでも改行でもコメントでも、プロシージャに変化があると動くようになる)
これはどういうあれなんや 全角のスペースとかキーワード途中での改行とか
無意識にやらかしたんでないの PowerQueryをVBAで使いたい初心者
>>690です。
変数に入れるファイルパスを、テーブルにしておかないと
PowerQueryは読んでくれないんだ。そのテーブル名とか列名も
指定するんだ、へ~、という現状からこの連休中に抜け出したいです。
テレワークからの連休突入前に先輩たちに投げた質問の答えは
「zoom飲み会やるから、入れとけよ。」でした。 VBAむずいが努力だわ
昇級幅が大きい時代の残りカスの50代の職場のおっさん達が給料ばっかり高くて
ExcelのSUM関数すらわからないレベルで
電卓で計算してテンキーで手打ち
そんな信じられない存在がいる職場
「俺のやり方があるんだよ!」
とか、心の底から腹が立つ
大手で組合もあるからリストラはされないんだが
そんなやつを駆逐したい
エクセル関数は職場で使うものはだいたい使っておっさん共の10倍は早くやってきたが
更なる憎しみだけが俺のVBA勉強へのモチベーションになってる >>760
そもそも、どう動かなくなるんだ?
エラーが出るのか?
Excel再起動で動くようになるか?
PC再起動で動くようになるか?
昔よくあったのがデバックやStopのように勝手に途中で止まるという奴。
F5で続行出来るんだけどまた途中で止まる。
Excelの再起動では治らんがPC再起動で治る。 >>760
Win10ではIEの動作が変わったのでVBAからコントロールするのがかなり大変になった
うまく動かない時は、ブラウザのキャッシュとかクッキーとか、WEBサーバの応答のタイミングとか調べる
変更しなくても時間を置けば動かないか、Excelを再起動したらどうか、パケットモニターとか調べた? 初めてのマクロでやりたいことはほぼ出来たのですが、新規ブックをコピー元のマクロごとコピーする方法が分かりません
xlsmで保存することは出来るのですが、どうもマクロの参照先がコピー元になっているらしく、新規ブックからマクロを実行するとコピー元のファイルをわざわざ開く形になってしまっています
マクロごとコピーする方法があればご教示ください >>762
初心者がPowerQuery使うの?
その前にやることがあると思うんだが。
まず、テキストファイルを扱えるようになりなよ。
自在にテキストファイルを扱えるようになれば、どんな形式のCSVでも関係無い。
セル内改行も、そのCSVのフォーマットが分かってないのが原因。
普通はデ−タに改行が入ってるならレコード間の改行と区別する何かがある筈。
1レコードの項目数が必ず決まっている(1レコードのカンマの数が決まっている)とか、そのテキストデ―タは必ずダブルクォーテーションで挟まれており、データ内の改行はダブルクォーテーションのInとOutの間のどこかにあるとか。
もちろんPowerQueryでも良いんだけど、それでたまたま解決出来そうだから飛び付くのは良くない。
こんなもの基本的な処理の組み合わせで出来るんだから、PowerQueryで有利な何かも無いのに無理矢理使おうとしてるように見える。 >>766
自分ではやったことないけどモジュールをそのままコピーするなら
http://officetanaka.net/excel/vba/vbe/07.htm#sample04
こういう方法じゃないかな
自分でやったことがあるのは
https://oshiete.goo.ne.jp/qa/756026.html
こちらの方法で、コードを一行ずつ書いていくことになります
ほんとにまるごとコピーでいいなら上の方法でしょうけど、thisworkbookとか
activeworkbookとか場合によって挙動が変わるような内容なら下の方法
じゃないかな >>768
>>769
ありがとうございます
お恥ずかしながら、今更ながらアドインと個人用マクロブックの存在を知りました
マクロの数も多いので、毎回記述する方法は重くなりそうですし、インポートも考えたのですが、管理するのが大変そうだと躊躇していました
とりあえず、個人用マクロブックで一括管理してやってみようと思います >>768
これは、セキュリティ上の危険を承知するなら良いんだけどね。
今のExcelはデフォルトで動かないように設定されてるよ。
動作原理はマクロウィルスと全く同じなんで。 >>770
マクロブックだと、最後の1ファイルを閉じてもアプリ画面が残っちゃう。
アドインだとこれを回避できる。 >>771
そそ。D&Dでパワポにノートを読み上げるマクロをぶっ込めるvbs作ったんだけど、よく考えるとちょつと怖くなった。 >>767
あ、ありがとうございます。
テキストファイルから…。
連休の課題にします! >>767
VBAのスレで言うのもなんだが
PowerQueryの前にやることがVBAなのかと >>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を使うなりして好きにいじったらいいんじゃないの >>772
なるほど、それはちょっと嫌かも
この際だからアドインも試してみることにします 何度もすみません
アドインを通常のマクロのように、図形などで作ったボタンに割り当てることはできないのでしょうか? デバッグ中からリセットをかける際に特定の処理をさせるようなイベントプロシージャって無いでしょうか >>779
それは俺も知りたいね。
リセットすると確実にExcelが落ちるプログラムを安全に終了したい。 >>778
アドインの場合、メインは別のブックになるわけだからアドインのシートとかは表示されないという基本は分かってる?
それが分かっていれば図形等で作ったボタンを配置する場所もないと分かる筈。
普通はメニュー(リボン)に作る。 >>764
>>765
数か月前の事なので返ってくるエラーは忘れたけど
どこかの部分で止まるのではなく、開始時に起きるエラーだったと思う
そのファイルを複数のPCで試したけど全てで同じ現象が起こる
で、subプロシージャのコードを一部変更して実行すると動く
コードの変更は何でも良くて
改行、何も書いていない行にスペース追加、コメント追加、コードを消して同じコードを書く
とにかく変化があれば再起動も何も必要なく正常に動く
変更後上書き保存してからは同じエラーは起こっていない
今は問題なく動いてるから困っては無いんだけど
あれは何だったのかなと思った >>760
俺もさんざん悩まされたが、ByVal/ByRef問わず、関数にオブジェクト渡すのやめたら改善したわ。
何でもかんでもパブリックにすんなアホって言われてたから、パブリックという発想が中々でなかったが。
>>764
俺の場合は何の音沙汰もなく強制終了だな。
エラーが出ないし、PCによっては動くし、改行いれるだけで変わることもあるから、
どこがおかしいのか全然わからんかった。
互換表示とか保護モードの有無も関係ないし。 多分、
Readystateコンプしてるのにエラーでるな〜
↓こうしちゃえ
On Error Resume Next
Do
IEにカキコ
Sleep 1000
Loop While なんとか
On Error Goto 0
長くて面倒くせえなぁ〜
関数化しちゃえ
で、オブジェクトを関数に渡して嵌る罠なんだと思う。 >>782
それ、IEと関係なく、Excelの更新が原因でvba関係にエラー起きてるやつでは?
ファイル開くときに「エラーがあります、可能な範囲で修正しますか」みたいなアラートがでて、はいを押すとコードが全削除される。 教えてくださいまし。。
画像のように日によって参加人数も競技した数も違うものを
受付した人と競技の範囲の値のみ
隣のシートに貼り付けるようにしたいですが
エクセル関数のエラーや未計算が都合上どうしても残ってしまい残ってうまく行かず…
https://i.imgur.com/Sd2Afas.jpg
https://i.imgur.com/MfnIQSU.jpg
https://i.imgur.com/lEQTEIe.jpg
受付した人の数字が空白になるまでは空白になるまで、競技も空白になるまで
その範囲のみをコピーというか可能でしょうか 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
これで作ってみたのですがやはり関数エラーが
邪魔してエラーになります
行も列も両方を空白までループして貼り付け
むずぃす エラーってそっちのエラーかい!
If IsError(セルの値) = False Then の時だけ実行とか。 それか、ValueじゃなくてTextでエラー回避。 >>788
全体的にめちゃくちゃで、それじゃ関数エラー以前にまったく動かないはずなんだけど、本当にそれで途中までは動いてるの?
スマホでポチポチ書き写すんじゃなくて、できるだけPCでそのままコピペしてくれない? >>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関数で空白の場合はセルも空白にしようかと思ったけどそもそも他部署の管轄
俺の圧倒的力の無さですわこりゃ というか完全に圧倒的勘違いでした
動いたと思っていざ使おうとしたら
他部署からのデータが画像のように
参加してない選手のところにセルにエラーがついてくる仕様なのに気付いて動かなかった
これが正解です
頭おかしくなってますわ >>794
ワークシートの数式を消しちゃっていいんなら、エラーの出てるセルを全部空白にするのは簡単
Sub エラー全部消す()
Dim c As Range
For Each c In ActiveSheet.UsedRange
If IsError(c.Value) Then c = ""
Next
End Sub >>796
教えてくれてありがとうございやす
ただシート内の別のところにも数式待ちのエラーのセルがあって俺の管轄じゃないので全てのエラーを消すわけにはいかず…範囲指定するスキルもなく…
>>797
>>798
完全にその赤枠のところの「値」のみをコピーしたいです
それが毎回、選手の数と競技の数が違う
という感じです
選手Cが空白なのに選手Dは数値が入る
ということはないので
受付の列が空白になるまでコピーを
ループ?とか考えながら挫折してます 受付の行が空白のセルになるまでループしつつ
競技の列が空白になるまでループ??
んん?違うか
GWになのにExcel開いてずっとマクロで悩むとは…とんだステイホームですわ >>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 ごめん
ちょっとだけ修正させて
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 この程度のものを人に聞かなきゃできないようじゃ先が思いやられる
これで職場の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
はぁ・・・おれ深夜に何やってんだか・・・ >>776
ご助言ありがとうございます!
教えていたことの意味を調べながら勉強します。
ちなみにうちの職場では55歳のオバハンが独学で書いてるVBA
が一番「きれい」だそうで。教科書通りで、整理整頓されてる感じで
非エンジニアには優しいんです。(簡単なものしか作らない人ですけど。)
でも「リーダブルコード」とか「VBA実践のためのなんちゃら」とか
読んで勉強してるの見かけたので、心がけは見習いたいです。 > Sheets(Tensu) = "点数"
> Sheets() = "結果シート"
きれいだとか汚いとかいう以前に読む気が失せるな
入門書買ったとか言ってなかったっけ? >>805
>独学で書いてるVBAが一番「きれい」
>教科書通りで、整理整頓
それはあるかもな
プログラマだとなまじ他言語の知識があるために
トリッキーなことやりだす奴が一定数いるからな
効率が良い面もあるだろうが他人が理解しにくい >>803
生血プログラマーなら1行にするべきである ああ、
If a = True Then
a = False
ElseIf a = False Then
a = True
End If
みたいなやつか。
大っ嫌いだけどな。 >>810
そもそも>>809が何を言いたかったのかわからんが
それaがBooleanじゃないと同じじゃないからな うん、>>809が何を言いたいのか不明瞭だな。
あのIf文も自分は嫌いじゃ無い。
見てすぐ分かるんで。
長くても短くてもすぐ分かれば問題なし。
a=not aでも別に良い。 >>814
オバハンが独学で書いてる綺麗なコードって、
a=not aを>>809みたいに書いてるやつかなと思って。 俺はBooleanにたいして= Trueは大概は冗長に感じるけどな
VBAは型がゆるいからなぁ
If a Then は気持ち悪いが、これは変数名が悪い >>807
perl で組んだテトリスだったかな。あれ見たときはぶったまげた。
元々ワンライナーをやりやすい言語とは言え、あれはもう
何が何やらわからない世界だった。どんだけ頭いいんだよと。
でも、「こんなの理解できないの?ふ〜ん(にやにや)」みたいな
のは生産性的には駄目だよね。
美しさをトリッキーさに見出すか可読性に見出すかは人それぞれ
だけど、自分よりスキルが下の他人に保守させるとか、未来の自
分が保守しないといけないかもとかなら冗長性持ってるほうがいい
かも。
いちばん大事なのは懇切丁寧なコメントだろうけど。 >>805
> ちなみにうちの職場では55歳のオバハンが独学で書いてるVBA
> が一番「きれい」だそうで。教科書通りで、整理整頓されてる感じで
> 非エンジニアには優しいんです。(簡単なものしか作らない人ですけど。)
> でも「リーダブルコード」とか「VBA実践のためのなんちゃら」とか
> 読んで勉強してるの見かけたので、心がけは見習いたいです。
あえて長文引用させてもらったけど、あんた程度の人間がなんで
その55歳の女性を貶めてるの? >>817
いや、想像はついてた。
大嫌いというのが分からんかった。 まともなプログラマなら周りのレベルに合わせて読みやすいコードを書けるよ
VBAの仕事なんかやってる時点でその程度のレベルなんだから仕方ない >>819
コメントもたくさんあれば良いというもんじゃない。
Dim blFlg AsBoolean 'フラグ
こんなコメントはアホ。
フラグかどうかは名前と型で分かってる。
残すべきはどういうフラグかだ。 >>823
それは確かにコメントっつうより、「ノイズ」だなw >>822
まともなプログラマなら周りのレベルにあわせて読みやすいコードをかける。
お前とは違ってなw >>824
意外に近いのはある。
コメントより元々の変数名を伝わるものにするのが第一義。
それで伝わりにくい時にコメントで補足する。 ただ、伝わりやすい変数名ってのが読む方の英語の素養に
大きく左右されちゃう不幸が。
TOEICで600くらい(英語の得意な高校生あたり)を想定するのが
いいかなあ。 Cプログラミング診断室の第三章の中盤に出てくるフラグの所に似たようなのが出てくる。
言語は違うが読んどくと良い。
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.3.7.html ここのスレ見てると、共同で保守してるのに細かい仕様書作ってない感じ
VBA使いって連携取るの苦手だろ 自分だけ楽するために片手間に作ったやつがいつのまにか広まって、ドキュメントなんかもちろん作ってなくて、最初に作った人は異動しちゃって、みたいなことVBAではよくある VBAは事務員のオバさんが作る程度のオモチャ
仕様書とか本気で言ってんの?
キモいわ 仕様書を書くような立場で仕事をしたことない人は黙ってな 会社のファイルで仕様書作ってあげてもいいんだけど今の職場では上司が理解できないからあえて作らないでいる 全社に配布するようなものは仕様書も作るしテストもやるけど、自分とか課内で使うようなツールだと作りっぱだな
別に他の言語でも変わらんと思うが 共同開発やドキュメントが必要になるレベルのプロジェクトには別の言語を使うのが普通
VBAスレで仕様書の話題はスレ違い うちの職場じゃボタン押すことぐらいしか出来ないような連中ばかりだから
仕様書どころかマニュアル作っても1割ぐらいしか理解してもらえないだろうな
目の前で説明しても少し込み入った設定になると覚える気一切ないしな
俺がいなくなったら終わりと思ってる
コメントすら残してない こんにちは。
このスレを見て勉強しようと思って色々読んでは、たいてい
なんの話をしているのかもわからない、プログラマではない層の者です。
上の方で、
>>809
If a = True Then
a = False
ElseIf a = False Then
a = True
End If
みたいな書き方っていやだね。
>>810
a = Not(a) でいいんじゃ?
という会話があったのですが、>>809 って
どんな時に使うのかさっぱり???でした。
どなたか暇つぶしにでもご教示いただけませんでしょうか。 ドキュメントが必要かどうかに言語は関係ない
プロジェクトの内容次第 >>841
例えばテレビのリモコンの電源ボタンとか消音ボタンのような使い方をするイメージ >>838
お前の所の普通が世間一般の普通じゃないだけが >>845
お前いつも質問スレに無関係な書き込みばっかだな
どうせPC-VANやってた老害だろ If a = True Then
誰にでもわかる書き方でとても良いと思う
今VBAを勉強する人は本職プログラマではなく
別に仕事があって、その効率化の為に学んでる人が主でしょう
そしてそれを非プログラマ同士で共有するのなら
どの本にでも書いてある書き方の方が望ましい
匿名の名人様の言葉に右往左往する必要はないよ Debug.Print xml.getElementsByTagName("タグ名").Item(0).Text
Microsoft XML, v3.0 参照 → OK
Microsoft XML, v6.0 参照 → エラー
何でやねん。 >>841
卜グルボタンとかチェックボックスのようなオンオフするようなものを変数で管理しようとした時に、変数がTrueならFalseに設定し、FalseならTrueに設定する処理を書いている。
最初のIf文の方は英文が分かれば簡単に理解出来る。
Notを使う方はTrue/Falseだから変数を変数自身と反対にすることで実現してる。 検索Dialogの検索場所(WithIn)をVBAから切り替えるアイデアをお持ちの方いたら教えていただけないでしょうか。
全シートから検索するのが目的ではなく、ブック全体検索後に何気に範囲指定置換を実施して引き起こされる惨状を回避したく。
(または別視点による工夫でもOKです)
詳しい方、よろしくお願いします。 >>852
意味不明な点が多すぎる。
>ブック全体検索後に何気に範囲指定置換を実施して
検索と置換ダイアログでは検索、置換は違うタブだから操作ミスは起きずらいが、
そこまでしなきゃならないのか
>引き起こされる惨状を回避したく。
惨状って具体的になにか
そもそも惨状とやらが起きるのは、GUIの話なのかVBAの話なのか 841です。
丁寧な解説、みなさんありがとうございました。
勉強になりました。 >>855
アンカーも書けず全角で数字を書くよな馬鹿は死ね >>853
説明が不足していました。
検索と置換のタブはパラメータ設定の記憶が共通となっております。
ブック全体検索を行った後に範囲を選択して範囲内置換を実施しようとCtrl+Hを押します。
すると前回検索時の "検索場所=ブック"が活きている状態になっております。
気づかずに実施すると全シートの指定文字列が置換されてデータが破壊されてしまいます。
コロン ":" でも削除置換しようものなら全ての時刻書式が破壊されます。
お試しください。
これを防ぐには、ブック内検索を実施した際は引き続きシート内検索を実施して設定を戻しておく必要があります。
普段ブック内検索ってあまり使わないのでこんな時に限って忘れてしまいます。
VBAはどうなっているかというと、.Find .Replace共に、WithInパラメータが存在しないため引数指定できず、直前のUI操作依存となるわけです。
自動化された置換処理があったりすると、事故が起こるわけです。
本件、GGってよく捜してみたら同様の悩みに対するQAありました。
Range("A1").Find("*")
この1行を実施するだけで検索場所をシートに戻せるようです。
逆に検索場所をブックにする方法を探しているところです。
ご存じの方おられましたら教えてください。 .OpenTextで開いたテキストファイルを操作したいのですがやり方がわからなくて困っています。
拡張子CSVなら通常のエクセルワークシートと同様に扱えますが、テキストファイルは無理なのでしょうか?
Workbooks.Countは開いたテキストファイルの分増えているようですが…
ご教示お願いいたします。 テキストファイルの中身はどのようなフォーマットで、どう操作したいのですか? 1セルに1文字づつならExcelチックに楽しめそうだな
知らんけど >>857
まず、問題としてる事象は提示している方法で解決するんだよね
そのブック開いたときとか操作したときに実行すればいい
>「ブック全体検索を行った後」に「範囲を選択」して「範囲内置換を実施」(ブック全体と指定しているオプションを開いたまま)
→ その悪意に満ちた行為のみを想定するの?
検索ダイアログのオプション設定は起動中のExcelアプリ(プロセス)に記憶されるから、
Excelアプリを開いたまま同じPCで同様の操作をしないと再現しないはず
>気づかずに実施すると全シートの指定文字列が置換されてデータが破壊されてしまいます。
→ さっきの操作をすると検索オプションは開いてるはずだけど、
それでも気付かずファイル保存するっていう悪意ry
GUI操作->GUI操作で出る問題なら、運用で禁止するか保護するか、影響に基づいて運用システム自体を見直す
>逆に検索場所をブックにする方法を探しているところです。
→ 問題としてる事象の解決は自分で提示しているようだけど、
逆に引き起こしたいってことは、単にやりたいから?
VBAで置換するなら別に全シートをReplace擦ればいいだけだし
GUIでブックにしたいならそう操作すればいいけど、何が必要なの
検索と置換ダイアログの操作はCommandBars.dialogsとかExecuteMsoとかで表示は出来る
ウィンドウ操作にしても他のダイアログ操作と似たようなもんだろう(APIが多分必要)
GUIとVBAをごっちゃに対応するから要らない悩みを抱える
運用やコストを考えない妄想の機能なら、それこそ趣味でアドインでも作ればいい 説明足らずで申し訳ありません。
カンマ区切りのテキストファイルに対してOpenTextを使います。これでカンマごとにセルに値が分けらたエクセルブックが開きます。
このブックのシートを通常のエクセルシートと同様に、例えばRange("A1").Activateとしたいのですが、ブックをどうやって指定すればいいのでしょうか?
以下の方法を試しましたがうまくいきません。
元々開いているブックが一つのとき、テキストファイルはWorkbooks.CountWorkbook=2として開かれることを確認。このときWorkbooks(2)をVariant型の変数に代入しようとしました。
Set myBook = Workbooks(2)
ウォッチ式でmyBookの値を確認すると
型 Variant/Object
値 <変数なし>
となり値が取得できません。
テキストファイルの拡張子をCSVに変更すると問題なく値が取得できます。
すみませんがよろしくお願いいたします。 >>862
ご回答ありがとうございます。
>オプションを開いたまま
これの意味がわからないですが、ダイアログを開いたままという意味なら、閉じても記憶は維持します。
全体検索実施と範囲選択実施は一連の動作じゃないです。
例えば複数のファイルを開いて作業していて、全体検索を実施したファイルは既に1時間前に閉じていたとしても設定は維持されます。
これを悪意と言われましても、、
まあ、この点は前述のコードをシートイベント等に挟むことで防げそうです。
(設置Bookに限られるかな?まあ、良い方法を考えてみます)
>それでも気づかずに
キーボード主体でマウスはほぼ使わない派なので、範囲選択→ダイアログ開く→検索語、置換語入力→Enterの動作は
一連の操作で、ガッ、ガガガッで感じでやっちゃうのでダイアログのパラメータいちいち確認しないんですよね。
ちょっと落ち着けよって話なんでしょうけど。
>問題としている事象の解決は自分で提示しているようだけど、
最初に掲げた命題が "VBAで検索場所(WithIn)を切り替えたい" だったので逆の操作もできれば知りたいという程度です。
破壊リスクは回避できそうですが、例えば範囲が”シート"の状態からVBAで"ブック"に変更して全置換も可能なのかな、という疑問です。
結論としては通常の方法では出来なそうですね。
Worksheets.Select: Cells.Select を実行すれば、シートをForで回さなくても
Selection.Replace できることもわかりましたのでこれで解決としたいと思います。
>GUIとVBAをごっちゃに対応するから要らない悩みを抱える
GUIの設定がVBA操作にも影響を与えてしまうから制御できないかなと思った次第です。
お付き合いいただきありがとうございます。 >>863
txtファイル開いた時点で何かしらのファイル名が付いてるでしょ 特に目的があるわけではないけど、興味があってVBAを勉強しようと思ってます。
皆さんどんな勉強法しましたか?おすすめの本とか有りましたら知りたいです >>864
まあ終わってるからいいけど・・
>>オプションを開いたまま
>これの意味がわからないですが、ダイアログを開いたままという意味なら、閉じても記憶は維持します。
→これは、「検索と置換」ダイアログの
「検索場所」ドロップダウンはGUIだと「オプション>>」ボタンで開かれる拡張エリアにのみ表示されて、
「ブック全体を選択した」=「オプションを展開表示している」から、GUIなら気付かないわけがない。
ということ。
ダイアログ内の設定値同様、オプション展開状況もExcelプロセスで共有してるから、
他のファイルで展開してるなら違うブックでも展開されたままダイアログ表示される。
>GUIの設定がVBA操作にも影響を与えてしまうから制御できないかなと思った次第です。
VBAもGUIで行った設定の影響を受けないような、Rangeを指定する記述を普通は心掛けるべきだな 今までそーいうものだと思い込ませて放置していたことなのですが、
引数を使うのにカッコつけなきゃいけないメソッドと、使わなくてもいい
メソッドって、なにが違うんでしょうか?なにか理由があるのでしょうか。
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)
ご教授何卒宜しくお願いいたします。 >>867
オプションが開かれてるという意味でしたか。
なるほどですね。
呼吸レベルでキーコンビネーションで通り過ぎちゃうので、、しっかり見るべきだと。
>VBAもGUIで行った設定の影響を受けないような
ごもっともです。
普段は .Find系は滅多に使わないのですが、あるとき大被害にあって、、、
どちらかというとGUI操作のほうが悩ましかったので、、、
API制御の方法にも辿り着けて、各Controlの制御もわかりました。
一瞬表示されてしまうのが難点ですが。良い情報をいただきました。
ご助言感謝します。 >>868
とりあえず戻り値があるかないかの違いとでも思っとけばよい 12121212111211121112みたいな数列で、
1212..と続くものにはA、
11121112..と続くものにはBと置き換え、
AABBBのような文字列を作成することはできますか? その数列を文字列に直しておく
これをReplace関数で
1212 → AA
A12 → AA
に置換する
同様に 1112 についても行う vbaのエディタの話なのですが、皆様はコードの複数行を選択したいとき
ショートカットかなにか使っているのでしょうか?
たとえば、一部のコードが不要になって削除や切り取りしたいときに、
ちゃんと行頭から行末までしっかり選択しないとtabやスペースが残ってしまい、
その後コードがズレたり色々と不都合が生じています。
現在は、Homeで行頭、Shift+下矢印で選択しています。
マウスで左端をドラッグすれば選択できるのは知っていますが、これの
キーボードショートカットとかないんですかね・・・ >>876
web拝見しましたが、「複数選択→tabで行範囲が作成される」という部分
でしょうか?確かに、削除ならこれでいけそうです。
(コピーや切り取りのときにはtab→shift+tabで元通りにしなきゃならないかもですが)
私はずっとvbaを使わずエクセル本体の操作に慣れていたのですが、よく使っているのが
適当な複数のセル範囲を作成⇒それらをshift+spaceで行範囲化
という動作だったので、ここにいる方たちはvbaではどんな操作を
しているのか気になって質問いたしました。ありがとうございました。 >>878
すみません、何回webを読み返しても分かりません…
自分でショートカットを作れる(ユーザ設定のコマンド)という部分
かなとも思ったのですが… コメントアウトだけはctrl+/でデフォルトでできるようにアプデして欲しいわ。。
設定もボタンクリックもめんどい うーむ…どういじっても分からない…
Ctrl+Yは現在の行だけしか削除されないし、そもそも選択範囲は
作成されないし…
おっさんになった私の限界ですかね汗 >>884
やろうとしていることに何の意味がある? クラスに対してモジュールという概念がよくわかりません。Cで言うところ外部ヘッダファイルとソースみたいなものでしょうか。クラスを使ってたら基本的に出番がない? クラスはOOPに出てくるクラス
newする必要がないならモジュール モジュールはVBがオブジェクト指向になるまえからの互換のためだから
クラスを使うなら忘れてもいいよ
広域で静的なクラスだと思えばいい >>865
そのファイル名を使っても値が変数なしになってしまいます… >>863
それウォッチがちゃんと出ないだけで、ブックそのものはとれてるだろ
試しにやってみたが、myBookのウォッチで展開すると変数なしだが
myBook.Sheets(1).Range("A1").Activate でちゃんと動作するぞ 基本的にプログラミングがうまくなる人って、
早い段階で、特定のやり方にこだわらず最終的に要件を満たせればいいってことに気付けるんだよな それはプログラミングをするという前提を置いている時点で矛盾している
手段はなんでもいいから目的達成できりゃいい、だと、だいたいのことは出来合いのSaaSを契約して使うのが最良 仕事ならそうだよね
代わりにSaasでってのは範囲が違うので当てはまらないけど 普段の自分のやり方じゃ対応できない場面が出た時は、
変に拘らずに完成優先でやるべきって意味でしょ >>885
余計な操作が無くなることでかかる時間とストレスが減って、その分
新しい知識や技術を取り入れることに割ける、という意味があると思って
質問してみました。
>>878のちがうだろの結局何が違うのかは分かりませんでしたが…
まあ、ググレカスは昔からある2chの風習だと思いますが。 >>901
残念ながら設定でこれだけ躓いて立ち止まるような人は言ってるような時間の有効活用できるとは思えんな
ツールはツールと割り切ったり慣れたりする事ができないなら、今後時間の有効活用できるようにもなれないよ 頭のおかしい人の書き込みを読むのが無駄なので無視しますね >>896
そいつは違うな。
拘るのは必要だ。
最適なのに拘るの。
だから動いたで終わりにしないで他にもっと良い方法はないかを常に考える。
自分が知らなかった技術を手に入れた時に、これを使えば5年前のあの件はもっと上手く出来たかもと考える。 本気でやり方に拘ったらExcelなんて大半が無駄なわけで
自分達の仕事を守るためにも割り切りは必要 >>896
>>907
短期では手段にこだわらない方が早いが
長期では技術向上になるから両方必要だ そんな1つのVBAに何日もかけれんわ
時間かけれるならWebサービスとかAPIとかもっと皆が幸せな解決方法が大体あるわ VBAとか関係無く、プログラミング全般の話なんだけどね。
動きゃ良いとかいう奴はいつまで経っても出来るようにゃならんよ。 >>911
無い。
VBAが使われる所は殆どVBAじゃないとどうにもならんから使われてる。 Application.CentimetersToPoints(1)
で列幅1cmにしたいんですが、
何度やっても5.64cmになります。
Rows(n).RowHeight = Application.CentimetersToPoints(1)
はちゃんと行幅1cmになりました。
Columns(n).ColumnWidth = Application.CentimetersToPoints(1)
だと何故か列幅5.64cmになります。
この事についてどう検索しても誰も言及してないことも含めて謎が尽きません。
煮詰まり過ぎて焦げ付いてきたのでどなたかアドバイスお願いします。 あっまさか列と幅のポイントは同じポイントでも数値としては別物って聞いた気もする
そして行幅のポイントの方がVBAのポイントと合致しているという訳か
だとすると列幅のポイントに変換するのはどうしたらいいのか… >>913
列幅の単位は違う
列幅の設定の仕方も
「application.centi〜 列幅」
で検索すればサンプルがいくつか出てくるけどね >>917
ページレイアウトにして、列幅1cmをマクロ記録 >>914
瞬時に思い付くのに5年前のコードのこと修正するのかよw
5年間もずっとVBAばっかやって、しかもそんな昔のコード引きずってるのw >>921
あれ、分からんかった?
瞬時に5通り思いついたとして、5年後に知らない技術を獲得した時に、あの時これ使えばもっと良くなったなあと思うとか。
あるいは昔、どうしても解決出来なかった問題が解決出来たとか。
俺の場合はデフォルトのプリンター設定のポートを変更するプログラムが出来なくてね。
PRINTER_INFO_5構造体を使ってプリンターのプロパティ設定変更するのは出来てたけどポートはさらに先のポインタでその時は出来なかった。
もっとも、これ10年以上前の話だし、それで修正するとかいう話でもないけどな。 >>923
理解出来なくて悔しいからって、そうまでして絡みたいの? 効いてる事にして勝ったつもりになってるけど実は・・・ >>924
別に古臭いVBAおじさんに絡みたいとかないけどなw
その程度でどや顔して、こんなところで長文まで書いて哀れだなあってねw
・瞬時に5個思い付く(ドヤア)
・10年以上前の話(ドヤア)
・どうしても解決出来ない問題が解決できた(ドヤア)
いい年して恥ずかしいww 4月、5月、6月というシートを請求書という新しいブック名のシートに追加していきたい場合
請求書というブックがなかったら
請求書というブックを作成して○月のシートをコピー
既に請求書というブックがあったら
そのブック内に○月のシートをコピー
という考え方でいいですか?
というか可能ですか? 既にあるブックを変えて問題ないんならいいんじゃないの >>930
あ、恥ずかしくなってるwかわいーねーw 色々調べ直して列幅1cmできた! ありがとうございます。
それにしたって、なんと解りにくい…
CentimetersToColumnPointsみたいにしてくれればいいのに… >>931
自分の技術が足りないのがそんなに悔しいのかねw >>933
恥ずかしくて言えることないの草
黒歴史だねーww >>933
あ、>>928とか5通り早くコード付で答えてあげなよww
あと5年後まで改善策見つけたら書き込んでねw >>934
君が初心者に毛が生えたレベルなのは俺の責任じゃ無いんだ。
悔しいからって絡むのは辞めてくれw だいたい、バカにしようととしたら自分より上のレベルで悔しくても、それは自分が悪いんだろw array関数で要素を代入する際に、プロシージャ引数のヒントの様にカンマで区切ると何を入力すべきか表示させることは出来ないでしょうか。要素が多いので解りづらくて
戻り値ありの関数作るべきなのでしょうか >>938
入力に困るほど大量のデータをプログラム中に直接書くのは設計が悪いと思う
せめてワークシートに見出しを付けて並べたら? >>936
恥ずかしい書き込みするやつの言うことは違うなあw
10年以上前の話とか言っちゃうんだもんなあww
で、5年がなんだって?w >>940
だから絡むの辞めてくれ。
初心者のプライドが傷ついたのかよw >>941
>出来る奴は瞬時に何通りかは思いつく。
>もっとも、これ10年以上前の話だし、それで修正するとかいう話でもないけどな。
>瞬時に5通り思いついたとして、5年後に知らない技術を獲得した時に、あの時これ使えばもっと良くなったなあと思うとか。
ん?早く質問者に5通りコードで回答してあげなよ、プロVBAおじさんww >>943
その返しもバカっぽくね?
質問の内容とか考えた? >>943
>早く質問者に5通りコードで回答してあげなよ
日本語をちゃんと理解することができる? static変数の宣言と同時に初期値入れても、Cと違って毎回初期値が入るようなんですけが回避方法ってありますか >>945
ほらほらー、10年以上やってこの程度も5通り分からないの?ww
「出来る奴は瞬時に何通りかは思いつく。」
んだろwwほらほらww バッチを非同期で実行したいんだけどShellでやってもWSHShellでやっても
バッチの終了まで待たされるんだけど何故?
やってることはIEを操作してファイルをDLするところまでVBAでやって
それ以降の処理をバッチでやりたいんだけど… 非同期オプション付けても出来ないのですか?
不思議ですね 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でネットワークドライブにカレントを変更する/ >>948
くだらねえ煽りの前にお前が日本語を理解出来て無かったのが分かったのか?
そして今は理解出来てるんだろうな? >>948
そしてもう1つ。
質問の内容とか考えた? >>949
Shellは待たされないと思うぞ。
待つにはタスクからプロセスハンドルを得て、WaitForSingleObjectとかを使う筈。
←たしかこいつは古いんで今は似た名前の奴を使う。 >>953
ただのコピペしかできない馬鹿だからだろ >>957
他のサイトも色々見て調べたり試行錯誤したのですが
Cが表示されなくて。
何か縛り的なのがあるかわかりますか。
貼り付け時の表示文字数に制限があるとか。
最悪わからなければ、
¥¥からCまでを取得したものをセルに貼り付けて
C以降を貼り付けたものを&で繋げて使おうか迷ってます。 >>953
最小限のコードで実験してみ?
(1)ワークシートにハイパーリンク設定
(2)FSOでフルパス取得
(3)MsgBoxで確認
(4)セルにフルパスの文字列を入れる 1)と2)と4)についてはBまでの表示
3)についてはフルパスでは試してないので、試して見ます。
ちなみに3)はカレントディレクトリのみで行うと、Cまで表示されて、次の行に2)を試すとBまでになってしまいます。 >>954
質問どんどん来てるよww
10年やってきたんだから早く5通り以上答えてあげなよww
そしてリファクタリング出来たらその都度書き込んでなw
>出来る奴は瞬時に何通りかは思いつく。
>もっとも、これ10年以上前の話だし、それで修正するとかいう話でもないけどな。
>瞬時に5通り思いついたとして、5年後に知らない技術を獲得した時に、あの時これ使えばもっと良くなったなあと思うとか。 >>956
思うぞと言われても実際待たされてるから困ってるんだが。
検索しても待つ方法しか引っかからんし…
CPU使用率が上がるとVBAスクリプトが止まるとかそういうわけじゃないよね パスとドライブの違いわかってる?
uncパスの形式わかってる?
そのaもbもフォルダじゃないけど、なにをどうやって表示させた? 最小限のコードでテストしてみた
Excel2019のshell関数でバッチの同時起動できてるから原因は別の所にある
https://i.imgur.com/bqqc2uc.png >>953
ハイパーリンク扱う時って表示文字列とアドレスの2つがあった気がするが関係ないか? >>963
わかりにくくてすいません。
abcは仮に書いた感じで、実際はネットワーク上のフォルダ名になります。 >>966
何をやろうとしてるのかイマイチよくわからん
試したコードとワークシートのスクショをここに書いて >>961
日本語が理解出来てたのか出来て無かったのかどっちだい?
話はそれからだ。 >>967
ネットワーク上にあるエクセルファイルで、
相対参照で貼り付けされたハイパーリンクがあるんですが
それを絶対参照で取得したいです。
カレントディレクトリを¥¥a¥¥b¥¥cで設定し
GetAbsolutePathNameで取得しあるセルに貼り付けると
なぜか¥¥a¥b¥取得したパス.xlsxになります。
カレントディレクトリをmsgboxで表示すると¥¥a¥b¥cとなります。
今端末が手元にないので、スクショ取れるようになり次第
対応します。
助かります。 いくつか他の言語はできるからなんとなく雰囲気で
特に勉強はしていない >>962
何となく分かった。
待たされたんじゃなくてフォーカスがバッチファイルにある。
よく、たくさんのウィンドウが開いてる時なんかにメッセージを表示しようとタスクバー上で点滅してるのと同じ現象。
バッチファイル実行中にExcelをクリックするとすぐ実行されるよ。
Shellの第2引数にvbNormalNoFocusを指定してみよう。 >>969
カレントディレクトリとは何かを調べた方が良い。
これはエクセルファイルだとかに関係が無い。
動いている場所だ。
ブックのある場所でも無い。
ハイパーリンクの相対参照、絶対参照の操作でカレントディレクトリが関係することは無い。 >>971
マイコンBASICマガジンのゲームがやりたくて覚えた
子供は記憶力がいいからすぐ覚えた
大人になってから始める人は大変だろうね >>968
話はそれからだ、ってコード5つ提示もしないで答えない10年経験者に言われてもなあww
ほらコード5つ提示して答えてあげなよw
>出来る奴は瞬時に何通りかは思いつく。
>もっとも、これ10年以上前の話だし、それで修正するとかいう話でもないけどな。
>瞬時に5通り思いついたとして、5年後に知らない技術を獲得した時に、あの時これ使えばもっと良くなったなあと思うとか。 >>974
ご指摘ありがとうございます。
相対参照だと./や../で省略されてしまうので
省略される箇所(ネットワーク上(インターネット上ではない)の決まったフォルダ)
を指定するためにカレントディレクトリで設定していました。
ちなみに複数端末でファイルを操作する事を想定しています。
もう少し勉強します。 >>977
やっぱり日本語分かってねえじゃんwww >>969
ネットワーク上にあるエクセルファイルはUNCパスになるので
ディレクトリ構成はサーバー上での階層
一番上はサーバーのIPアドレス(DNSで変換された名前) >>979
自分の言ったこと分かってねえじゃんww
>出来る奴は瞬時に何通りかは思いつく。
>もっとも、これ10年以上前の話だし、それで修正するとかいう話でもないけどな。
>瞬時に5通り思いついたとして、5年後に知らない技術を獲得した時に、あの時これ使えばもっと良くなったなあと思うとか。 議論してるところ申し訳ないけど
>>928
わかる方お願いできますか >>981
バ一カw
>>983
そう、これが正解。
バカと違って質問の意味が分かってる人はこういう答えになるから何通り等の方法等とならないことを知っている。 ある表があって一行ずつアクティブセルをループで下に移動させ、条件があった場合offset で特定のセルを集計するマクロを作成し使用してたんだけど、
アクティブセルじゃなくてcellで置き換えたら実行スピードが早くなった。
やっぱり画面が遷移すると遅くなるんだよね?
オートフィルタ組み込むと遅くなる? >>984
矛盾しまくってるがww
頭悪いなーVBA10年以上やってるんだろww
瞬時に5通りできるんじゃないんですかー?www
ID:KpBIrL5Ad
ID:74X5YOol0
ID:MibsCGor0
>バカと違って質問の意味が分かってる人はこういう答えになるから何通り等の方法等とならないことを知っている。
>出来る奴は瞬時に何通りかは思いつく。
>もっとも、これ10年以上前の話だし、それで修正するとかいう話でもないけどな。
>瞬時に5通り思いついたとして、5年後に知らない技術を獲得した時に、あの時これ使えばもっと良くなったなあと思うとか。 フォームからシートにデータを入力する場合、セルに値を入れるコードはどちらに書く方が良いのでしょうか。
シート側に関数処理書いて、フォーム側から引数渡す形を考えていますが、本来はどういう使い方なのかわからず。 >>989
書き方が何通りかある場合、どれを選択するかは作る人が選択すればいい >>937
フォームとシートでどちらが主役かで決めるといいと思ったけど
シートをコピーしたときにコードもコピーされて後で大変になるから、シートじゃない方がいいね ありがとうございます。
フォームのコード量が多くなりますね。別クラスに記述してみます。 俺の仕事はお前のものだ。
お前の仕事はお前のものだ。
お前の手柄は俺のもの。
俺の手柄は俺のものだ。
みんな違っていいじゃないか。
だって、人間だもの。 このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 53日 15時間 35分 24秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。