X



Excel VBA 質問スレ Part57
レス数が950を超えています。1000を超えると書き込みができなくなります。
0851デフォルトの名無しさん
垢版 |
2018/11/03(土) 06:31:10.97ID:5ShzkuEH
>>849
マクロの記録だと余計な処理が追加されるから、それを削るだけでうまくいくはず
まずは記録したマクロをここに書いてみ

ただしCtrlを押しながら複数のセルをコピーした場合はかなり難しくなる
0852デフォルトの名無しさん
垢版 |
2018/11/03(土) 06:39:13.96ID:IAxxklmh
>>848
ああ、なるほど。
確かにフォームボタン使ってた。
そのために余計な苦労をしたってわけか。
情報Thx!
0853デフォルトの名無しさん
垢版 |
2018/11/03(土) 11:31:29.48ID:/0NNzwPk
>>851
Sub Macro5()
'
' Macro5 Macro
'

'
Range("AH11").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub


こんな感じです。これはセル1つ選択です。(最終的には複数選択してシート間でコピペする予定です)
0854デフォルトの名無しさん
垢版 |
2018/11/03(土) 11:43:19.50ID:S6AysWL6
社名 金額  部門
================
A社 1000円 営業
A社 2000円 事務
A社 1500円 事務
A社 3000円 販売
B社 1500円 事務
B社 3500円 営業
C社 1000円 営業
C社 3000円 営業
C社 1500円 販売
D社 2000円 事務

こんな感じのA社⇒D社のように整列されたデータに対して
0855デフォルトの名無しさん
垢版 |
2018/11/03(土) 11:43:51.55ID:S6AysWL6
社名 金額  部門
================
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以上あるので速度重視であれば望ましいです
0856デフォルトの名無しさん
垢版 |
2018/11/03(土) 12:46:22.45ID:q2N3VeHV
そんなもんExcelのグループ集計で一発
お前に必要なのはVBAではなくExcelの入門書
0859デフォルトの名無しさん
垢版 |
2018/11/03(土) 13:18:18.27ID:3VcH/mb2
標準のエディタインライン展開できないとかsubの引数名自動で変えられないとかクソすぎ
誰かもっと開発しやすいやつをくれ
0864デフォルトの名無しさん
垢版 |
2018/11/03(土) 15:14:54.13ID:NeGXChns
>>853
単にシート間で複数セルの値を同期させたいだけならそもそもクリップボードを経由しない方が早いのでは?
VBAでコピーしないでワークシート関数でシート間参照させるとか、コピー元のセルのValueプロパティなりFormulaプロパティなり、必ずコピーしなきゃいけないプロパティだけをコピー先のプロパティに直接代入するとか

ユーザーによるコピー操作そのものを再現しなきゃいけない理由でもあるの?
0865デフォルトの名無しさん
垢版 |
2018/11/03(土) 18:06:58.76ID:/0NNzwPk
>>864
シート間で照合するデータだとマクロ使わずできるのですが、
コピー元のシートのデータが大きいので、ペースト先のシートには必要なものだけを張り付けて、
印刷用のフォーマットに変換させて、終わったらペースト先のシートは保存せず元に戻すという操作をしたいと考えています。


お願いします。
0866デフォルトの名無しさん
垢版 |
2018/11/03(土) 19:32:11.39ID:NeGXChns
>>865
元データの書式や印刷用シートの体裁、印刷するデータの抽出方法などがわからないが、やりたいことからすると、Range.TextプロパティかValueプロパティの値をコピー先にそのままコピーするだけで良さそう

コピー元とコピー先のデータの体裁によっては、Range.AdvancedFilterメソッドで印刷用シートの方にフィルタ結果を出力するとかもできる
0867デフォルトの名無しさん
垢版 |
2018/11/03(土) 22:51:34.85ID:MUI16VQU
クラサバシステムを作るのは現実的なのでしょうか?
DBは相性からいってSQLServerで
0868デフォルトの名無しさん
垢版 |
2018/11/03(土) 22:58:31.43ID:zFR/cOIP
>>867
Excelで作ろうとしてる理由が能力の問題なのか、それともExcelのワークシートの機能が必要だからなのか、それ次第だな
C#やVB.NETやJavaで作れる能力があるなら普通に作れるし、無いなら無理
能力が無いならAccessでも使ってろ
0869デフォルトの名無しさん
垢版 |
2018/11/03(土) 23:03:55.31ID:e+FwThFa
能力の問題なら今ならOffice365のPowerAppsおすすめ
たぶん>>867が手作りするより遥かに高品質なものが一瞬で作れるよ
0870デフォルトの名無しさん
垢版 |
2018/11/03(土) 23:12:01.99ID:MUI16VQU
作りたいのは、Activitiのエンジンを使ったWFシステムです
Excelで検討する理由は、ADによるシートとセルの権限管理ですかね
0871デフォルトの名無しさん
垢版 |
2018/11/04(日) 00:03:26.74ID:Ujv6OCQm
いやクラサバだったら権限管理はSQL Server側でやるもんだろ
当然、SQL Serverなら問題なくADで制御できる
その調子じゃ厳しそうだね
0872デフォルトの名無しさん
垢版 |
2018/11/04(日) 00:32:40.13ID:xCAdckZO
Excelのレベルで権限制御したところで、別のExcelシート作ってデータソース参照するだけでやりたい放題やで
Excelに限った話ではなくC#などでクライアント作る場合でも同じことで、プロなら絶対にありえない設計
0874デフォルトの名無しさん
垢版 |
2018/11/05(月) 12:48:07.93ID:g2XKp1gu
またプロさんイキっとるのw
0875デフォルトの名無しさん
垢版 |
2018/11/05(月) 23:37:43.98ID:Vz2xlIAK
>>866
Range.Textプロパティ、Valueプロパティが良く理解できなくて困ってます。
セルの指定で合ってますか?

コピー元の表の中からから1行(5セル分)コピーして、隣のシートの所定の位置に貼り付けたいです。
1行選択した後、マクロ起動させて隣のシートに張付けという操作です。頼みます、教えてください!
0876デフォルトの名無しさん
垢版 |
2018/11/06(火) 00:56:10.22ID:bmwIjcqH
>>875
Sub CopyToPrintForm()

ThisWorkbook.Worksheets("データ用シート名").Range("コピー元セルの行番号:コピー元セルの行番号").Copy Destination:= ThisWorkbook.Worksheets("印刷用シート名").Range("コピー先セルの行番号:コピー先セルの行番号")

End Sub
0877デフォルトの名無しさん
垢版 |
2018/11/06(火) 01:09:36.50ID:bmwIjcqH
>>875
印刷するデータの行をユーザーに選ばせる場合、ユーザーに行選択させた状態で以下のマクロを実行させるようにするとかでいいだろ
文字通り一行コピーしてしまうので要注意

>>875
Sub CopyToPrintForm()

ThisWorkbook.Worksheets("データ用シート名").Activate
ActiveCell.EntireRow.Copy Destination:= ThisWorkbook.Worksheets("印刷用シート名").Range("コピー先セルの行番号:コピー先セルの行番号")

End Sub
0878デフォルトの名無しさん
垢版 |
2018/11/06(火) 01:38:13.14ID:ca/fCdtD
>>877
ありがとうございます。
Pasteはいらないのでしょうか?
0880デフォルトの名無しさん
垢版 |
2018/11/06(火) 02:42:45.06ID:hX39oSae
>>865
>ペースト先のシートは保存せず元に戻す
マクロを実行すると「元に戻す」は使えなくなるから、一々開きなおさないといけないけど大丈夫なのかな
もしその作業が連続して行われるなら、テンプレート用シートと印刷用シートを別に用意した方が楽な気がする
0881デフォルトの名無しさん
垢版 |
2018/11/06(火) 06:33:12.72ID:ca/fCdtD
>>880
保存せずは間違えでした。
ペーストしたものをデリートするマクロを作って、元に戻す予定です。
0883デフォルトの名無しさん
垢版 |
2018/11/06(火) 08:01:03.35ID:hqcuocq7
>>881
印刷用シートはデータと切り離してテンプレート用の別のファイルにした方が良い
そうすれば、印刷処理のとき一時的にテンプレートから印刷用フォーマットを書き起こした後、印刷用フォーマットのブックを削除するだけで済む
印刷後に印刷用シートを初期化するマクロを更に走らせるなんて、手間を増やしてるだけだと思うぞ
0884デフォルトの名無しさん
垢版 |
2018/11/06(火) 19:36:10.55ID:gYvutDKX
複数端末で使用しているマクロがあります
端末aのデスクトップに目当てのファイルがあり、他の端末はネットワークで繫がっている端末aのデスクトップを覗きに行く感じになってます
ファイルパス & filenameで参照したいんですがどのように書くべきなんでしょうか
0885デフォルトの名無しさん
垢版 |
2018/11/06(火) 19:50:54.72ID:S8pHBi6C
>>884
のぞいてる?
スケベ!
0886875
垢版 |
2018/11/06(火) 19:57:59.09ID:ca/fCdtD
みなさんありがとうございます。自分のイメージしてたものが100%出来ました。
0887デフォルトの名無しさん
垢版 |
2018/11/06(火) 22:30:23.08ID:hKUAUjlF
VBAベーシックの資格取得がてら基本情報の午後問対策にしようと思ってるんですけど出題範囲とかレベル感的に同じくらいですかね?
0888デフォルトの名無しさん
垢版 |
2018/11/07(水) 10:26:42.01ID:d5oBs1zX
VBAの資格って新しくできたのか?
0890デフォルトの名無しさん
垢版 |
2018/11/07(水) 10:44:51.43ID:t8cEHMAy
>>889
\\端末a:\Users\Admin\Desktopみたいな感じですね、ありがとうございます

ちなみにこれは端末aでも端末a以外でもこの書き方一つで参照出来るんでしょうか
0891デフォルトの名無しさん
垢版 |
2018/11/07(水) 10:53:48.53ID:XvVrOgoe
>>890
端末aのフォルダを共有設定にしておかないとアクセスできない
共有になってれば、どのPCでもアクセスできる
エクスプローラーで共有フォルダを開いて、アドレスバーをコピペしてみると書き方が分かる
0893デフォルトの名無しさん
垢版 |
2018/11/07(水) 11:34:31.05ID:+HyKX3eQ
>>887
基本情報はJavaやCできない文系カスならExcel選べばいいでしょ
ワークシート関数を使いこなせれば十分で、VBAなんか全く要らん
0894875
垢版 |
2018/11/07(水) 20:36:23.84ID:TW51zyDp
マクロ起動でシートの切り変わりで画面がブレるというか、もう少しスムーズに動いて欲しいと感じます。
1行まるごとコピーしているので重いのでしょうか?
0895デフォルトの名無しさん
垢版 |
2018/11/07(水) 22:08:04.86ID:Qojc5OuV
配列に入れるとか?
dim a
a = sheet1.Range("コピーしたい範囲")
sheet2.Range("sheet1と同じ大きさ") = a
シート切り替える必要あんの?
0896デフォルトの名無しさん
垢版 |
2018/11/07(水) 23:56:50.98ID:kdSj6Mns
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
0898デフォルトの名無しさん
垢版 |
2018/11/08(木) 00:00:20.32ID:+1CERcyT
ちなみに拡張子をcsvにすると以下のような変な出力になる。

A B C
1 my name is taro
2 hello world""
3 hello,world
0899デフォルトの名無しさん
垢版 |
2018/11/08(木) 00:02:21.00ID:M68F6j6d
"が一個足りない
csvで"をインポートするには
"を""にして
"でくくらないといけない
0900デフォルトの名無しさん
垢版 |
2018/11/08(木) 00:10:13.02ID:+1CERcyT
手順としては以下でよいか?
1. test.txtの中身を置換で「""」にマッチする箇所を「"""」として保存する
2. 拡張子をcsvにする。

期待値になったのでよしとする。
さらに一歩質問いいですか?
0901デフォルトの名無しさん
垢版 |
2018/11/08(木) 00:19:54.15ID:+1CERcyT
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にしたら、ちゃんと期待値になってた。。
んー、、途中で改行が入るケースではまってた記憶があったんだが、、、、。これでよしとするか。。
0902デフォルトの名無しさん
垢版 |
2018/11/08(木) 00:35:58.02ID:+1CERcyT
ああ、思い出した

"がつかないケースで、改行が入っている場合

test.txtの中身
1,my name
is taro

エクセルにして期待値として以下としたい

A B
1 (※)

(※)
B1セル内に
my name
is taro
が格納され、適切に改行が入っていることを期待。

拡張子をcsvに置き換える前に、"で囲むようにすればいいが、置換でなんとかならないものか。
0905デフォルトの名無しさん
垢版 |
2018/11/08(木) 11:52:01.74ID:rWQT8E4I
excelの3Dグラフで陰線処理ってできますか?
0908デフォルトの名無しさん
垢版 |
2018/11/08(木) 14:42:53.05ID:rBrrwKGn
>>905
昔方法探したけどできなかった


陰線処理ってエロくないのにちょっとエロく思える単語だよな
0909デフォルトの名無しさん
垢版 |
2018/11/08(木) 15:12:21.75ID:BZZI+ZYR
質問する奴も答える奴も論外で草
質問する奴はそういうスレだからともかく
答える奴が池沼なのはもう少し何とかならないか?
VBAだから無理か
0910デフォルトの名無しさん
垢版 |
2018/11/08(木) 19:19:19.39ID:j6Jh7/pK
なんやプロさん同士で内紛勃発か?w
0911デフォルトの名無しさん
垢版 |
2018/11/08(木) 20:27:13.91ID:hKKyRwQm
>>907
えっ?
絡んで無いと思ってる?
今となっては初心者でも使う手法だと思うんだが。

それとも何か勘違いしてるのは俺か?
0912デフォルトの名無しさん
垢版 |
2018/11/08(木) 20:30:22.05ID:j6Jh7/pK
>>911
おまえだけやプロさんw
0915デフォルトの名無しさん
垢版 |
2018/11/08(木) 22:38:08.36ID:j6Jh7/pK
プロさんにつっこんだらあかんやろ
暗黙のルールぐらい守れやカス
0918デフォルトの名無しさん
垢版 |
2018/11/09(金) 10:17:43.12ID:46H7vVxk
http://sagawa-oki.com/
ここにアクセスしたら不審サイトであると警告が出ました。
PCに詳しい人、これどういうしくみなんですか?
オレのPCは感染したのですか?
0923デフォルトの名無しさん
垢版 |
2018/11/09(金) 22:36:34.07ID:dt2W+h7o
デザイナーが描くような美しいUMLのシェイプを生成するDSLライブラリはありませんか?
PlantUMLのエクセルバージョンのようなものを探してます
0925デフォルトの名無しさん
垢版 |
2018/11/12(月) 08:23:59.02ID:emJ6rSNr
901だが、
さらにおしえてほしい
textに

"please call a "phone"."

と書かれているケースがあり、これをcsvとして読みこませる前に
表記が崩れないように整形を加える。

最終的に1セル内に
please call a "phone".
が入っていればよいです。

上記を実現するための整形の流れとしてどうしたらいい?
整形後は、phoneの間に"をさらに追加する。端っこの"には手を加えない。
"please call a ""phone""."

手作業ではなく、置換で自動化したい
0926デフォルトの名無しさん
垢版 |
2018/11/12(月) 09:22:19.42ID:CGIJA+ER
そういうのはCSVとして読み込むんじゃなくて、自前で構文解析した方が良い。
この程度なら難しく無いでしょ。
0927デフォルトの名無しさん
垢版 |
2018/11/12(月) 09:52:07.52ID:zyHWT4B/
>>925
正規表現置換の使えるエディタで
検索パターン
([^\,\"]+?)\"{1}([^\,\"]+?)
置換後
\1\"\"\"\2
などとすれば一応行ける
0929デフォルトの名無しさん
垢版 |
2018/11/12(月) 21:39:04.12ID:OsYv7RWH
全く無知な自分にご教授下さい。
マクロでフォルダ内のエクセルのシート1をすべて結合するマクロを探しています。
ネットに転がってるのを実行してもうまくいかないです。
できればですが、シート名は統一していないないので、ブックないのシートのRange(A1)が日付だったシートのみを結合とか高度すぎて無理でしょうか。
0930デフォルトの名無しさん
垢版 |
2018/11/12(月) 21:42:09.58ID:dMWbNPXa
>>929
私には可能ですし特に高度とも思いませんが、貴方にできるかどうかは知りません
少なくとも今目の前の問題を片付けたいだけであれば、諦めて手作業したほうが貴方にとっては早いでしょう
0931デフォルトの名無しさん
垢版 |
2018/11/12(月) 21:54:32.66ID:JxfhNlMu
ネットに転がってるのがあってもできないなら回答しても意味なくね?
ファイル名が統一されてないからうまく行かないんなら、フリーソフト拾ってきて一括リネームしたら済む話かもしれない
何を試みて何かどううまく行かなかったのか、真に目的を達成するには何がどうなっていればいいのか
それくらいは頭を整理して明記しなさい
何がわからないのか何がしたいのか自分でわからないけど親切に要件をヒアリングして代わりに作ってほしい、ならそこらへんのSIerに相談しなさい
0932デフォルトの名無しさん
垢版 |
2018/11/12(月) 22:03:30.98ID:XDhm+jvj
>>930
バカはお口にチャックな
0934デフォルトの名無しさん
垢版 |
2018/11/12(月) 22:18:58.14ID:OsYv7RWH
>>930
なるほど。難しいって事ですね。
>>933
sheet(1)だと中にはsheet(2)にデータがある場合があるんです。
なのでシートのA1が日付の時だけコピーとかしたかったのです。
0936デフォルトの名無しさん
垢版 |
2018/11/13(火) 00:16:47.48ID:6PLLlNb2
>>927
試したけど、grepにひっかからず。
0937デフォルトの名無しさん
垢版 |
2018/11/13(火) 00:18:49.38ID:6PLLlNb2
936ですが、
原因が分かりました。
([^\,\"]+?)\"{1}([^\,\"]+?)の後の半角スペースが入っていたので引っ掛からなかった。
半角スペース覗いたらできました。
0938デフォルトの名無しさん
垢版 |
2018/11/13(火) 03:19:44.71ID:gWmuHRek
>>925
1"2"3"4"5

これが君には、"24"、"3" の2つに見えるけど、
普通の人は、"2"、"4" の2つに見える

つまり、"3" がネスト・内側だとは判別できない。
内側を表すには、確実に、外側と区別できる方法が必要

例えば、""3"" のように、" が2個続いたら内側と解釈するとか、何らかの方法が必要だけど、
他に解釈されないような、特別な記号を作るのは難しい
0939927
垢版 |
2018/11/13(火) 07:16:41.37ID:xWZc78Mp
>>937
半角スペースはそちらでの混入かと
0940デフォルトの名無しさん
垢版 |
2018/11/13(火) 21:19:22.76ID:8adn94NA
>>937
Excel vba にも正規表現による置換機能あるよね?その検索パターン、置換する文字列をそのまま使えるのか?
0941デフォルトの名無しさん
垢版 |
2018/11/13(火) 21:22:12.20ID:Vxu3kwrv
>>938
長い、3文字で
0942デフォルトの名無しさん
垢版 |
2018/11/14(水) 00:32:01.09ID:cWkoLxip
こんばんは。質問させてください。

VBAでXMLファイルを作成したいのですが、MSXML2というパーサ(?)を使わないといけないのですか?
Printなどを用いてテキストファイルを作成し、拡張子を.xmlに変更して作成した場合、何か問題があるのでしょうか

XMLファイルはただのテキストファイルだという認識だったのですが、「VBA XML 作成」などと検索すると
ほぼ全てのサイトでMSXML2を用いた方法が紹介されているので混乱しています

よろしくお願い致します
0943デフォルトの名無しさん
垢版 |
2018/11/14(水) 02:04:23.47ID:otO/yyOk
Ruby, Python, JavaScript など、すべての言語・コマンドでも、そう。
HTML, XML, JSON などは、それ用のライブラリを使う

勝手に作ったファイルは、パーサーで解析すると、
間違った形式・フォーマットで作られている、正しい形式ではない、という形式違反になる

正しい形式かどうかを、チェックするツールもある
0944デフォルトの名無しさん
垢版 |
2018/11/14(水) 03:54:10.85ID:KIwP1nqR
以前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として扱うのは出来ないのでしょうか。
0945デフォルトの名無しさん
垢版 |
2018/11/14(水) 06:47:08.50ID:F2hyLHDL
>>942
> MSXML2というパーサ(?)を使わないといけないのですか?
別にMSXML2なんて単なるライブラリだから使わなくてもいいよ
ただXMLにきちんと対応するのは面倒だからみんな使ってるだけ
0947デフォルトの名無しさん
垢版 |
2018/11/14(水) 09:35:48.86ID:JBsUV7Ak
>>940
VBAでの後方参照(\1や\2のような)はExecuteメソッドが要る、
grepやpowershellみたいに簡潔にならんけどできないことはない

Set Matches = RE.Execute(対象文字列)
For Each Match In Matches
Match.submatch(0) & """""" & match.submatch(1)
Next Match
0948デフォルトの名無しさん
垢版 |
2018/11/14(水) 21:48:32.31ID:X5SCw3Kf
入力規則のリストでリストのいずれかを選択した時に
アクションを起こしたいのですが、方法はあるのでしょうか。
selection changeでは無理でした。
0950デフォルトの名無しさん
垢版 |
2018/11/15(木) 01:04:33.76ID:pL2ZxAKh
>>949
出来ました!
こんなに簡単なことを見落としていたなんて情けない・・・
ありがとうございました。
レス数が950を超えています。1000を超えると書き込みができなくなります。

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