Excel VBA 質問スレ Part57
レス数が950を超えています。1000を超えると書き込みができなくなります。
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part56
http://mevius.5ch.net/test/read.cgi/tech/1534976724/ >>849
マクロの記録だと余計な処理が追加されるから、それを削るだけでうまくいくはず
まずは記録したマクロをここに書いてみ
ただしCtrlを押しながら複数のセルをコピーした場合はかなり難しくなる >>848
ああ、なるほど。
確かにフォームボタン使ってた。
そのために余計な苦労をしたってわけか。
情報Thx! >>851
Sub Macro5()
'
' Macro5 Macro
'
'
Range("AH11").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
こんな感じです。これはセル1つ選択です。(最終的には複数選択してシート間でコピペする予定です) 社名 金額 部門
================
A社 1000円 営業
A社 2000円 事務
A社 1500円 事務
A社 3000円 販売
B社 1500円 事務
B社 3500円 営業
C社 1000円 営業
C社 3000円 営業
C社 1500円 販売
D社 2000円 事務
こんな感じのA社⇒D社のように整列されたデータに対して 社名 金額 部門
================
A社 1000円 営業
A社 2000円 事務
A社 1500円 事務
A社 3000円 販売
A社 営業計 1000円 <
事務計 3500円 <
販売計 3000円 <
計 7500円 <
B社 1500円 事務
B社 3500円 営業
B社 営業計 3500円 <
事務計 1500円 <
計 5000円 <
C社 1000円 営業
C社 3000円 営業
C社 1500円 販売
C社 営業計 4000円 <
販売計 1500円 <
計 5500円 <
D社 2000円 事務
事務計 2000円 <
計 2000円 <
全社 営業計 8500円 <
事務計 7000円 <
販売計 4500円 <
計 20000円 <
こんな感じに行の間に小計、最後に合計を挿入するようなコードありますか?( < が追加行)
小計は必ず 営業、事務、販売の順番に並び、0円の場合は行自体挿入しません
実際ののデータは会社数、部門共に30以上あるので速度重視であれば望ましいです そんなもんExcelのグループ集計で一発
お前に必要なのはVBAではなくExcelの入門書 標準のエディタインライン展開できないとかsubの引数名自動で変えられないとかクソすぎ
誰かもっと開発しやすいやつをくれ >>853
単にシート間で複数セルの値を同期させたいだけならそもそもクリップボードを経由しない方が早いのでは?
VBAでコピーしないでワークシート関数でシート間参照させるとか、コピー元のセルのValueプロパティなりFormulaプロパティなり、必ずコピーしなきゃいけないプロパティだけをコピー先のプロパティに直接代入するとか
ユーザーによるコピー操作そのものを再現しなきゃいけない理由でもあるの? >>864
シート間で照合するデータだとマクロ使わずできるのですが、
コピー元のシートのデータが大きいので、ペースト先のシートには必要なものだけを張り付けて、
印刷用のフォーマットに変換させて、終わったらペースト先のシートは保存せず元に戻すという操作をしたいと考えています。
お願いします。 >>865
元データの書式や印刷用シートの体裁、印刷するデータの抽出方法などがわからないが、やりたいことからすると、Range.TextプロパティかValueプロパティの値をコピー先にそのままコピーするだけで良さそう
コピー元とコピー先のデータの体裁によっては、Range.AdvancedFilterメソッドで印刷用シートの方にフィルタ結果を出力するとかもできる クラサバシステムを作るのは現実的なのでしょうか?
DBは相性からいってSQLServerで >>867
Excelで作ろうとしてる理由が能力の問題なのか、それともExcelのワークシートの機能が必要だからなのか、それ次第だな
C#やVB.NETやJavaで作れる能力があるなら普通に作れるし、無いなら無理
能力が無いならAccessでも使ってろ 能力の問題なら今ならOffice365のPowerAppsおすすめ
たぶん>>867が手作りするより遥かに高品質なものが一瞬で作れるよ 作りたいのは、Activitiのエンジンを使ったWFシステムです
Excelで検討する理由は、ADによるシートとセルの権限管理ですかね いやクラサバだったら権限管理はSQL Server側でやるもんだろ
当然、SQL Serverなら問題なくADで制御できる
その調子じゃ厳しそうだね Excelのレベルで権限制御したところで、別のExcelシート作ってデータソース参照するだけでやりたい放題やで
Excelに限った話ではなくC#などでクライアント作る場合でも同じことで、プロなら絶対にありえない設計 ここで板違いの質問を堂々とするレベルなんだから w >>866
Range.Textプロパティ、Valueプロパティが良く理解できなくて困ってます。
セルの指定で合ってますか?
コピー元の表の中からから1行(5セル分)コピーして、隣のシートの所定の位置に貼り付けたいです。
1行選択した後、マクロ起動させて隣のシートに張付けという操作です。頼みます、教えてください! >>875
Sub CopyToPrintForm()
ThisWorkbook.Worksheets("データ用シート名").Range("コピー元セルの行番号:コピー元セルの行番号").Copy Destination:= ThisWorkbook.Worksheets("印刷用シート名").Range("コピー先セルの行番号:コピー先セルの行番号")
End Sub >>875
印刷するデータの行をユーザーに選ばせる場合、ユーザーに行選択させた状態で以下のマクロを実行させるようにするとかでいいだろ
文字通り一行コピーしてしまうので要注意
>>875
Sub CopyToPrintForm()
ThisWorkbook.Worksheets("データ用シート名").Activate
ActiveCell.EntireRow.Copy Destination:= ThisWorkbook.Worksheets("印刷用シート名").Range("コピー先セルの行番号:コピー先セルの行番号")
End Sub >>877
ありがとうございます。
Pasteはいらないのでしょうか? 教えてください!とか言ってるから荒しかと思ってたがガチか >>865
>ペースト先のシートは保存せず元に戻す
マクロを実行すると「元に戻す」は使えなくなるから、一々開きなおさないといけないけど大丈夫なのかな
もしその作業が連続して行われるなら、テンプレート用シートと印刷用シートを別に用意した方が楽な気がする >>880
保存せずは間違えでした。
ペーストしたものをデリートするマクロを作って、元に戻す予定です。 >>878
引数付きでCopyメソッドを実行するときはPasteメソッドは書かなくていい >>881
印刷用シートはデータと切り離してテンプレート用の別のファイルにした方が良い
そうすれば、印刷処理のとき一時的にテンプレートから印刷用フォーマットを書き起こした後、印刷用フォーマットのブックを削除するだけで済む
印刷後に印刷用シートを初期化するマクロを更に走らせるなんて、手間を増やしてるだけだと思うぞ 複数端末で使用しているマクロがあります
端末aのデスクトップに目当てのファイルがあり、他の端末はネットワークで繫がっている端末aのデスクトップを覗きに行く感じになってます
ファイルパス & filenameで参照したいんですがどのように書くべきなんでしょうか みなさんありがとうございます。自分のイメージしてたものが100%出来ました。 VBAベーシックの資格取得がてら基本情報の午後問対策にしようと思ってるんですけど出題範囲とかレベル感的に同じくらいですかね? >>889
\\端末a:\Users\Admin\Desktopみたいな感じですね、ありがとうございます
ちなみにこれは端末aでも端末a以外でもこの書き方一つで参照出来るんでしょうか >>890
端末aのフォルダを共有設定にしておかないとアクセスできない
共有になってれば、どのPCでもアクセスできる
エクスプローラーで共有フォルダを開いて、アドレスバーをコピペしてみると書き方が分かる >>887
基本情報はJavaやCできない文系カスならExcel選べばいいでしょ
ワークシート関数を使いこなせれば十分で、VBAなんか全く要らん マクロ起動でシートの切り変わりで画面がブレるというか、もう少しスムーズに動いて欲しいと感じます。
1行まるごとコピーしているので重いのでしょうか? 配列に入れるとか?
dim a
a = sheet1.Range("コピーしたい範囲")
sheet2.Range("sheet1と同じ大きさ") = a
シート切り替える必要あんの? text.txtの中身
1,"my name is taro"
2,""hello,world""
3,"hello,world"
これをエクセルに変換して期待値は以下としたい
どうしたらいい?
A B
1 my name is taro
2 "hello,world"
3 hello,world 拡張子を.csvに変えてダブルクリックしてみよう
あら不思議! ちなみに拡張子をcsvにすると以下のような変な出力になる。
A B C
1 my name is taro
2 hello world""
3 hello,world "が一個足りない
csvで"をインポートするには
"を""にして
"でくくらないといけない 手順としては以下でよいか?
1. test.txtの中身を置換で「""」にマッチする箇所を「"""」として保存する
2. 拡張子をcsvにする。
期待値になったのでよしとする。
さらに一歩質問いいですか? test.txtの中身
1,"my name
is taro"
2,"""hello,world"""
3,"hello,world"
これをエクセルにして期待値として以下としたい
A B
1 (※)
2 "hello,world"
3 hello,world
B1セル内に
my name
is taro
が格納され、適切に改行が入っていることを期待。
が、csvにしたら、ちゃんと期待値になってた。。
んー、、途中で改行が入るケースではまってた記憶があったんだが、、、、。これでよしとするか。。 ああ、思い出した
"がつかないケースで、改行が入っている場合
test.txtの中身
1,my name
is taro
エクセルにして期待値として以下としたい
A B
1 (※)
(※)
B1セル内に
my name
is taro
が格納され、適切に改行が入っていることを期待。
拡張子をcsvに置き換える前に、"で囲むようにすればいいが、置換でなんとかならないものか。 なんかもう最初のカンマまでの文字数だけ切り取るほうがシンプルなんじゃ >>895
それのどこに配列が絡んでるんですかね? >>905
昔方法探したけどできなかった
陰線処理ってエロくないのにちょっとエロく思える単語だよな 質問する奴も答える奴も論外で草
質問する奴はそういうスレだからともかく
答える奴が池沼なのはもう少し何とかならないか?
VBAだから無理か >>907
えっ?
絡んで無いと思ってる?
今となっては初心者でも使う手法だと思うんだが。
それとも何か勘違いしてるのは俺か? >>907
変数代入のときにSetステートメント使ってないから、変数にはセル値の配列が入ってるぞ >>871,>>872
SQLServer側でセルの権限管理???
プロ?? プロさんにつっこんだらあかんやろ
暗黙のルールぐらい守れやカス そんなことより、XMLクライアントとしてのExcelを語ろうぜ >>914
セルの権限管理なんぞサーバーから見たら何の意味もないよ http://sagawa-oki.com/
ここにアクセスしたら不審サイトであると警告が出ました。
PCに詳しい人、これどういうしくみなんですか?
オレのPCは感染したのですか? >>918
もう手遅れですね
アマギフ送ってくれたら直してあげられるよ デザイナーが描くような美しいUMLのシェイプを生成するDSLライブラリはありませんか?
PlantUMLのエクセルバージョンのようなものを探してます データの持ち方はシンプルな方がいい
そうでないなら条件を明確に 901だが、
さらにおしえてほしい
textに
"please call a "phone"."
と書かれているケースがあり、これをcsvとして読みこませる前に
表記が崩れないように整形を加える。
最終的に1セル内に
please call a "phone".
が入っていればよいです。
上記を実現するための整形の流れとしてどうしたらいい?
整形後は、phoneの間に"をさらに追加する。端っこの"には手を加えない。
"please call a ""phone""."
手作業ではなく、置換で自動化したい そういうのはCSVとして読み込むんじゃなくて、自前で構文解析した方が良い。
この程度なら難しく無いでしょ。 >>925
正規表現置換の使えるエディタで
検索パターン
([^\,\"]+?)\"{1}([^\,\"]+?)
置換後
\1\"\"\"\2
などとすれば一応行ける 訂正
置換後
\1\"\"\2
だな、1個多かった 全く無知な自分にご教授下さい。
マクロでフォルダ内のエクセルのシート1をすべて結合するマクロを探しています。
ネットに転がってるのを実行してもうまくいかないです。
できればですが、シート名は統一していないないので、ブックないのシートのRange(A1)が日付だったシートのみを結合とか高度すぎて無理でしょうか。 >>929
私には可能ですし特に高度とも思いませんが、貴方にできるかどうかは知りません
少なくとも今目の前の問題を片付けたいだけであれば、諦めて手作業したほうが貴方にとっては早いでしょう ネットに転がってるのがあってもできないなら回答しても意味なくね?
ファイル名が統一されてないからうまく行かないんなら、フリーソフト拾ってきて一括リネームしたら済む話かもしれない
何を試みて何かどううまく行かなかったのか、真に目的を達成するには何がどうなっていればいいのか
それくらいは頭を整理して明記しなさい
何がわからないのか何がしたいのか自分でわからないけど親切に要件をヒアリングして代わりに作ってほしい、ならそこらへんのSIerに相談しなさい Dir
sheet(1)
IsDate
この辺りで調べてみればそこまで難易度は高くないと思う >>930
なるほど。難しいって事ですね。
>>933
sheet(1)だと中にはsheet(2)にデータがある場合があるんです。
なのでシートのA1が日付の時だけコピーとかしたかったのです。 for each ws in Worksheetsとif文が使えればできるよ 936ですが、
原因が分かりました。
([^\,\"]+?)\"{1}([^\,\"]+?)の後の半角スペースが入っていたので引っ掛からなかった。
半角スペース覗いたらできました。 >>925
1"2"3"4"5
これが君には、"24"、"3" の2つに見えるけど、
普通の人は、"2"、"4" の2つに見える
つまり、"3" がネスト・内側だとは判別できない。
内側を表すには、確実に、外側と区別できる方法が必要
例えば、""3"" のように、" が2個続いたら内側と解釈するとか、何らかの方法が必要だけど、
他に解釈されないような、特別な記号を作るのは難しい >>937
Excel vba にも正規表現による置換機能あるよね?その検索パターン、置換する文字列をそのまま使えるのか? こんばんは。質問させてください。
VBAでXMLファイルを作成したいのですが、MSXML2というパーサ(?)を使わないといけないのですか?
Printなどを用いてテキストファイルを作成し、拡張子を.xmlに変更して作成した場合、何か問題があるのでしょうか
XMLファイルはただのテキストファイルだという認識だったのですが、「VBA XML 作成」などと検索すると
ほぼ全てのサイトでMSXML2を用いた方法が紹介されているので混乱しています
よろしくお願い致します Ruby, Python, JavaScript など、すべての言語・コマンドでも、そう。
HTML, XML, JSON などは、それ用のライブラリを使う
勝手に作ったファイルは、パーサーで解析すると、
間違った形式・フォーマットで作られている、正しい形式ではない、という形式違反になる
正しい形式かどうかを、チェックするツールもある 以前DOMについて質問させて頂いたものです。
前回はIEを直接開いて扱っていたのですが、
MSXMLという機能でIEを開かずにウェブサイトの情報を取得できると知り、
そちらの方が速そうだし面白そうなので挑戦しています。
そこで色々調べていたのですが、
http://d.hatena.ne.jp/end0tknr/20081115/1226755041
というブログに「MSXML2.DOMDocumentでxml responseをparseすることができます。」とあり、
Dim HttpReq As MSXML2.XMLHTTP
Dim DomDoc As MSXML2.DOMDocument
・・・
DomDoc.loadXML (HttpReq.responseText)
というコードが記述されていますが、ローカルウインドウを見るとXMLHTTP(XMLHTTP60)にresponseXMLというそれらしいプロパティがあります。
直接これをDOMとして扱うのは出来ないのでしょうか。 >>942
> MSXML2というパーサ(?)を使わないといけないのですか?
別にMSXML2なんて単なるライブラリだから使わなくてもいいよ
ただXMLにきちんと対応するのは面倒だからみんな使ってるだけ >>943
>>945
ありがとうございます
大変勉強になりました >>940
VBAでの後方参照(\1や\2のような)はExecuteメソッドが要る、
grepやpowershellみたいに簡潔にならんけどできないことはない
Set Matches = RE.Execute(対象文字列)
For Each Match In Matches
Match.submatch(0) & """""" & match.submatch(1)
Next Match 入力規則のリストでリストのいずれかを選択した時に
アクションを起こしたいのですが、方法はあるのでしょうか。
selection changeでは無理でした。 >>948
普通のWorksheet_Changeイベントを使う >>949
出来ました!
こんなに簡単なことを見落としていたなんて情けない・・・
ありがとうございました。 レス数が950を超えています。1000を超えると書き込みができなくなります。