Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 7e6d-ffY6)
垢版 |
2017/08/27(日) 12:40:17.57ID:LjjEWylk0
!extend:checked:vvvvv:1000:512

スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

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

※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/

※前スレ
Excel VBA 質問スレ Part49©2ch.net
http://mevius.2ch.net/test/read.cgi/tech/1498410914/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/09/14(木) 15:52:46.83ID:IwoZ7QGd0
>>162
Sub foo()
Debug.Print Me.Name
End Sub

何故かthisworksheetは存在しない
Meを使う
2017/09/14(木) 15:53:31.32ID:IwoZ7QGd0
セルはもちろんこんな感じね
Sub foo()
Debug.Print Me.Cells(1, 1)
End Sub
2017/09/14(木) 15:54:13.48ID:IwoZ7QGd0
>>166
http://15g.jp/post-314/
これ使っても駄目_
2017/09/14(木) 15:57:20.47ID:+i9FPPOB0
>>169
なるほどイベント抑止か。
ありがとう、やってみる
2017/09/14(木) 15:58:45.31ID:EP6SpHBt0
>>164
シートモジュールに直書きする場合はSheetsの部分を省略してCellsやRangeから書ける。

シートを指定しない場合の振る舞いが、
標準モジュールではActiveSheet(見えているシート)だったものが、
シートモジュールではそのシートに限定されるという変化をするので併用する場合は注意が必要。
2017/09/14(木) 16:00:47.13ID:IwoZ7QGd0
標準モジュールに書いて、対象シートはsetした方がいいと思うけどなぁ
2017/09/14(木) 16:02:42.23ID:gZf88W9A0
>>167
ありがとうございます。
まさに求めていた回答です。Meとは気づきませんでした。
2017/09/14(木) 18:24:24.22ID:EcWTQGUxa
>>169
うへえ。
確かにそれは効果が高いが、それだけでOKとか、どんだけレベル低いんだ?

むしろ速度を意識したプログラム書いてる奴にとってはそれやっても速度なんて変わらんのだが。
2017/09/14(木) 18:59:59.93ID:IwoZ7QGd0
>>174
ではレベルの高い方法をどうぞ
2017/09/14(木) 19:19:27.73ID:VHoNboqWa
>>175
速度はコードによるから〜でOKなどというものじゃない。
別に、意識してコード書かなくても下記の後半部分にあるようなコードになる。
その上で速度を上げようと意識すれば一番最後のようになる。

http://excel-ubara.com/excelvba4/EXCEL228.html
2017/09/14(木) 19:23:47.78ID:NoiILVtJa
それで駄目ならマルチプロセスにする。
適用出来ないことも多いけどな。
objEx1=CreateObject("Excel.Application")
を複数作ってそれぞれに独立した計算をさせる。
2017/09/14(木) 19:34:05.01ID:IwoZ7QGd0
>>176
ありがとう、ここまで出来るとは思わなかった
他にも関数で高速化極めてて驚いたわ
良いものを見れた
2017/09/14(木) 20:04:51.07ID:EP6SpHBt0
シート作ったりセルに書き込んだりというエクセル側の操作をすると、
その度にイベントが走ることになるから、これを如何に抑えるかってのが重要なんだけど、
最初から全部覚えようとするとパンクする。
2017/09/14(木) 20:30:17.25ID:8w8A3LKI0
どんだけ頑張ってコード書いても、大量の演算は結局ピボットの方が高速なんだよな
2017/09/14(木) 22:08:17.65ID:/NzRhjzgM
For i = Lbound(X) to Ubound(X)

a = MATCH関数でXを検証

if XとMATCH関数が一致 Then

For j = Lbound(Z,2) to Ubound(Z,2)

Z(k,j) = cells(a,j-1).value

k = k + 1

next j

end if

Debug.print i

Next i

Xは要素が3万ほど
シートの列数も3万ほどでXと同じ値を格納
シートの列数は50程度

これでDebug.printの表示感覚が1秒ごとくらいなんだけど遅いですか?
30000 * 50 = 150000ループ
実に8時間ほどで納得行かない遅さなんです
2017/09/14(木) 22:14:39.02ID:IwoZ7QGd0
>>181
ファイルを上げてくれないか
実際に試してみないと分からん
2017/09/14(木) 22:16:42.03ID:EP6SpHBt0
>>181
そのコードの処理を見る限り、早くする方法はいくらでもあるけど、
処理がくっそ遅いMatch関数使って何かやってるんだから処理速度的にはそんなもんじゃないの。
2017/09/14(木) 22:18:51.12ID:CAJlFz9z0
何をするプログラムなのか最初に書いてくれないと、どこを観点に見ればいいかわからない

まあ、とにかくRangeを二重ループで触っちゃイカンよ

つーか、>>124と同じ課題か?
2017/09/14(木) 22:22:13.96ID:/NzRhjzgM
>>182
仕事用なんですいません…

>>183
MATCH関数遅いんですか?
元は3万行のシート回してたけどそれも遅かったんでMATCH関数使ったんですが
2017/09/14(木) 22:33:58.37ID:EP6SpHBt0
もしかして学校課題か何かか。三万行って。
2017/09/14(木) 22:37:11.21ID:XVFgKdZv0
MATCHもmatch_typeに1か-1を指定した時はバイナリサーチだから遅くないよ
0を指定してるとリニアサーチだから件数に比例して遅くなる
2017/09/14(木) 23:03:43.05ID:XSiUnmrc0
学校の課題なら手伝わんぞ、それはカンニングだw
2017/09/14(木) 23:08:26.96ID:6XISNqi7M
>>186
駆け出しのマです

>>187
少ない件数なら激早なんですけど多いと影響あるんですね

仕事だから検証に時間さくわけにもいかないけど納得行かないんですよね
連休に試してみますね
2017/09/14(木) 23:20:59.58ID:IwoZ7QGd0
>>189
上司に聞いてみたら?恒久的に超早くなりそうなんで何時間か遊ばせてもらえませんかって
家でも研究中といえば良い
俺が上司なら、ルーチンワークは最優先で効率化させるけどな
2017/09/14(木) 23:22:39.03ID:XSiUnmrc0
マ?
クベ??
2017/09/14(木) 23:37:20.66ID:EP6SpHBt0
仕事でプログラマやってんなら、それこそ会社に理解があろうがなかろうが検証時間取れないなんて事はないだろう。
どっちにしろ>>124と条件が被ってるんで>>147のtest2を参考に作り直せば速度的にはどうにかなるんじゃないの。
2017/09/15(金) 00:05:39.06ID:N1D7768S0
緑郎?
2017/09/15(金) 05:58:01.90ID:mR9ZEtfo0
駆け出しママ?
2017/09/15(金) 12:58:58.26ID:DPkC9aElx
>>172
オブジェクト変数多用は速度低下の一因になるぞ
2017/09/15(金) 13:29:55.54ID:+lt7NDiE0
駆け出しのマトリ?
2017/09/15(金) 17:41:48.27ID:YuOtTZO+d
表示シートのセルA1に『SD11』と入力してからコマンドボタン1を押したらマスターシートのA列をFINDで検索かけて下に一行ずつ表示シートの項目別にそれぞれ転記するにはどうすればいいですか?
検索まで出きるんですが、転記とループのやり方が分かりません。
https://i.imgur.com/Bd3WIPk.jpg
https://i.imgur.com/3IPhNPk.jpg
2017/09/15(金) 19:01:40.44ID:HxJpFmSs0
>>197
たぶんこれ、マスターシート?の一行目が項目になっている事から、
編集→テーブルでテーブル化してフィルタで絞ってコピペした方が早いんじゃないの。

種類の所だけ

Sub foo()
 For Each x In Range("A1:A12")
     if Len(x.Value) Then y = x.Value Else x.Value = y
 Next
End Sub

みたいな形で空白を埋めるようにして。
2017/09/16(土) 07:57:41.80ID:CZKDCudP0
どっちがマスターシートかすらわからないのは俺だけなのか?
2017/09/16(土) 08:55:03.94ID:8PfQF6Zm0
動物記を書いた方
2017/09/16(土) 08:57:29.36ID:0Tj0yPF60
それはファーブル
2017/09/16(土) 09:10:57.56ID:ZdfhdKJM0
シートンさん、涙
2017/09/16(土) 11:39:45.69ID:NmFgsGO20
>>201
父をたずねて三千里の旅に出るよ...


昆虫記
2017/09/16(土) 17:35:52.97ID:ZtR64OGap
excel2010使ってます。

apiを使ってアプリケーション外の任意の座標のピクセル情報を監視していますが、視覚的に監視している場所がわからないので、当該場所にbitmapを最前面に描画したいのですが、良い方法はないでしょうか?
あるいは、マウスのカーソルをその位置に描画する。とかも考えています。
205デフォルトの名無しさん (オッペケ Sr4d-Ec1/)
垢版 |
2017/09/16(土) 18:35:05.61ID:uv+MHauzr
>>204
愚問だけど
なぜにVBAなんだ?
2017/09/16(土) 19:17:26.63ID:gf/ZkNkm0
>>204
WIndow作ってWM_PAINTで描画(GDI/GDI+)
Excelで直接やらなくてもいい気がするけど
2017/09/16(土) 21:10:59.05ID:XK5pYCg9a
>>206
昔、そういうプログラム書いてたな。
CreateCompatibleDCとか。

GDI+はステータスバーの数字を取得する為に使ったことがある。
よくあるウインドウハンドルから取得する方法やUIAutomation使う方法で取得出来なかったんで直接Bitbltかなんかで描画してるとしか思えなかった時に。
2017/09/17(日) 15:05:48.02ID:QbcXsmvT0
vbaでpdfをこのようにバイナリ変換?して仕事で使うサイトにpostしたいのですがどうすれば変換できますか?
https://imgur.com/iztKsA6.jpg (普通のブラウザで送信した際の通信データを出力したもの)
ググった結果出てきたバイナリ変換?は2種類試しましたが↓変換はされるのですが形式が違うのか上手くいきませんでした(文字化けの感じも違いました)

strfilenameにはpdfのフルパスが入ります
Function GetFile2(strFileName As String) As String
Dim strFile As String
Dim nFile
' Grap the file
nFile = FreeFile
' Open strFileName For Binary As #nFile
Open strFileName For Binary As #nFile
strFile = String(LOF(nFile), " ")
Get #nFile, , strFile
Close #nFile
GetFile = strFile
End Function

Function GetFile(strFileName As String) As String
Dim FileContents() As Byte, FileNumber As Integer
ReDim FileContents(FileLen(strFileName) - 1)
FileNumber = FreeFile
Open strFileName For Binary As FileNumber
Get FileNumber, , FileContents
Close FileNumber
GetFile = StrConv(FileContents, vbUnicode)
End Function
2017/09/17(日) 15:23:31.58ID:EJ9y/eYt0
>>208
pdfは元々バイナリファイル
それをテキストエディタで開けばその画像みたいになる
エディタで開く時のエンコーディングが違えば文字化けの見た目も変わる

postするときになんで変換しないといけないの?
2017/09/17(日) 15:37:36.74ID:QbcXsmvT0
>>209
普段のブラウザでpdfを投稿した際のpostデータを解析したらpostしているデータの中でpdfを>>208の画像の形で投稿していたので
excelで投稿する際も自分のpcにあるpdfをテキスト状に?変換してpostするものだと思いました
自分としてもファイルのフルパスだけ指定して投稿できたら楽だとは思うのですが・・・
211デフォルトの名無しさん (ワッチョイ 136c-XDX8)
垢版 |
2017/09/17(日) 18:33:42.58ID:QbcXsmvT0
そしてこれが>>208のマクロでpdfを変換してvbaから投稿した時のpostしているデータです
https://i.imgur.com/0LlxHf3.png
明らかに文字化けの雰囲気が違うこれだと投稿したpdfを開こうとしても「画像データに不足があります」と出てpdfが開けません
postデータは同じツールで表示していますのでvbaでの変換の方法に問題があるのかと思ってます
>>208の画像がこの画像と違ってどういう形式?なのか分かれば調べようもあると思うのですがいかがでしょうか
2017/09/17(日) 19:10:29.54ID:qW/WD7mR0
バイナリ変換とか変なことをするからややこしくなっている
データの解析なんてせんでいい
ファイルは素直にファイルのまま扱えばok

http://www.excel.studio-kazu.jp/kw/20140404154224.html
で、ここ見ておもったんだけど、htmlファイル作ってform用意して、submitすればいいだけじゃない?
ファイルが何個もあるとめんどくさいけど
213デフォルトの名無しさん (ワッチョイ 136c-XDX8)
垢版 |
2017/09/17(日) 21:01:40.83ID:QbcXsmvT0
>>212
前にそちらのサイトも参考にさせて頂いて、投稿はできたのですがpdfが開けなくて、
送信データももっとひどい文字化けになってしまい諦めてました
https://imgur.com/p1huKGY.jpg
unicodeで送信しているのを調整する必要があると書かれていたのですがそれが原因でしょうか・・・

ちなみに自分の使い方としてはそのサイトのようにグループウェアのキャビネットに投稿する形では無く、
仕事で使っているサイトのフォームで投稿する際に添付ファイルとしてpdfを付けるのが目的なのですが
下の方に書いてあるのはSet objIE = CreateObject("Internetexplorer.Application") 的なIEに直接vbaでsubmitさせるメソッドの事でしょうか?

今のところ、投稿する際にプルダウンや入力フォームで様々な値を入力しなければならなくて、
添付ファイルが無い状態での投稿は問題無く行えるようになったのですが
添付ファイルだけはどうにも壊れてしまうというのが現状なので何とかpdfもこのままpostできないかなぁ・・・というのが現状です

説明が下手で申し訳ないのですがどなたかアドバイス頂けたらと思います
2017/09/18(月) 11:37:33.30ID:d9P11nJN0
セルB4から始めて、右に8列‘’○‘’を順番に書き込んでからB5に下がってまた8列書き込む。それを10行繰り返すにはどういうコードになります?
2017/09/18(月) 12:09:05.81ID:Y2wXgXiBx
>>214
Forで二重ループ
Cells(5, 2)から始めて必要な列数だけ○を書き込む処理を10行分行うだけ
2017/09/18(月) 12:10:08.02ID:Y2wXgXiBx
>>215
Cells(5, 2)から始めて→Cells(4, 2)から始めて
2017/09/18(月) 12:28:31.10ID:XMy/3GFW0
ネットワーク上のフォルダにファイルを保存する時、
初回時のみ若干保存に時間がかかります。
一度実行したあとにすぐ実行すると、
既にネットワーク接続が確立しているからなのか、比較的早く保存できます。
保存は普通にsaveasで、UNCパスで保存しているのですが、
この初回保存時に時間がかからずに保存できる方法ないでしょうか。
2017/09/18(月) 12:39:51.48ID:QSt8wYFod
>>214
「セルB4から始めて、右に8列‘’○‘’を順番に書き込んでからB5に下がってまた8列書き込む。それを10行繰り返す」コード。
2017/09/18(月) 13:39:45.60ID:d9P11nJN0
>>215
>>218
ありがとうございます。頑張ってやってみます。
2017/09/18(月) 15:00:22.35ID:7Xxpypu9a
>>217
VBAの問題じゃなくてネットワークやSMBプロトコルの問題じゃないかなあ。
或いは名前解決問題も含んでいるとか。
2017/09/18(月) 15:03:30.32ID:7Xxpypu9a
>>219
全部"○"なの?
Range(B4:I13).Value="○"
じゃ駄目なの?
2017/09/18(月) 15:33:37.57ID:iDSQnxIm0
http://imgur.com/MSCp7vw.jpg

シート2で選択した人の時間データをシート1からシート2の各セルにコピペしたいです

イベントプロシージャで名前変更時にマクロ起動は出来ました
名前検索&シートを跨いだコピペがどうしても出来ないのでご助力下さい
2017/09/18(月) 16:32:44.21ID:tGO6qMv20
>>222
Accessでデータ管理してSQLで取り出すのが一番苦労がないと思うんだが。
2017/09/18(月) 17:38:30.84ID:zFeh6Anl0
>>222
普通にVLOOKUPで引っ張ってくれば
マクロは必要ないのではなかろうか。

どうしてもVBAでやりたいなら
WorksheetFunction.Matchで検索してみよう。
シート間コピペはRangeの前にワークシートオブジェクトを指定すればできます。
範囲でやる場合はValueを書かないとだめです。
Worksheets("シート2").Range("*:*").Value = Worksheets("シート1").Range("*:*").Value
実際には決め打ちじゃなくてCellsで検索結果に応じて可変にすればよいでしょう。
2017/09/18(月) 18:28:54.10ID:gz3Qfpmld
>>221
実際には別シートの値をみて条件付けてYESなら右に一個ずつ値を引っ張りたいだけです。
2017/09/18(月) 20:17:48.27ID:iDSQnxIm0
>>222ですがコピペ記述できました助言ありがとうございました

Sub

Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim name As String
Dim r As Variant

  Set ws1 = Worksheets("シート1")
  Set ws2 = Worksheets("シート2")
  name = Worksheets("シート2").Range("*").Value
  r = Application.WorksheetFunction.Match(name, Worksheets("シート1").Columns("a"), 0)
  
  Application.ScreenUpdating = False

  ws1.Activate
  ws1.Cells(r, 4).Select
  Selection.Resize(1,6).Select
  Selection.Copy
  ws2.Range("a6:a11").PasteSpecial (xlPasteValues)

  Application.ScreenUpdating = True

End Sub

シート切り替え時の画面ちらつきを消すために見よう見まねでScreenUpdatingを入れました
期待通りの動きをしてくれてますがもっと上手い記述を参考程度に教えていただきたいです

VLOOKUPだと直接セルに入力する場合があってその時困るのでVBAでやってみようと思った次第です
ACCESSは諸事情で使えません
2017/09/18(月) 20:45:41.88ID:d9P11nJN0
この小汚いコードなんとかなりませんか?
https://i.imgur.com/PH6sTKr.jpg
2017/09/18(月) 20:58:13.91ID:jDUrs+BF0
>>227
まず写真じゃなくてプリントスクリーンで
2017/09/18(月) 21:06:56.54ID:zFeh6Anl0
>>226
たぶんマクロ記録を改造しているんだと思いますが
Select、Activateはする必要なく
転記処理は
ws2.Range("a6:f6").Value = ws1.Range(ws1.Cells(r,4),ws1.Cells(r,9)).Value
この1行だけでいけるはず。
=の右辺と左辺が同じ大きさの範囲である必要あり。
範囲は実際のシートのに書き換えてお試しを。
2017/09/18(月) 21:26:16.39ID:d9P11nJN0
>>228
パソコンのネットがゴミ過ぎてパソコンからは書き込めないんです...
2017/09/18(月) 21:38:27.20ID:zFeh6Anl0
>>227
応用シートを変数に突っ込む
WithにRange指定まで突っ込む
RangeをCellsにして列参照を変数にする
オフセットの数値を変数にする
これでループで変数をインクリメントしていけばスッキリしそう。
2017/09/18(月) 21:41:20.89ID:tGO6qMv20
>>227
Sub foo()
Str_NowRng = FindRange.Offset(0, 1).Address
Str_ShuName = FindRange.Offset(0, 1).Value
Set 基礎 = Worksheets("基礎")
Set 応用 = Worksheets("応用")
i = 4
Do While Str_ShuName = "A"
For j = 1 To 5
応用.Cells(i, j + 1).Value = 基礎.Range(Str_NowRng).Offset(0, j).Value
If j = 3 Then 応用.Cells(i, j + 1).Value = 応用.Cells(i, j + 1).Value + Val(MSUN)
Next
With 基礎.Range(Str_NowRng).Offset(1, 0)
Str_ShuName = .Value
Str_NowRng = .Address
End With
Loop
End Sub

設計が腐ってる臭いがするので、小手先直したところで意味ないと思うけど。
2017/09/18(月) 21:46:33.83ID:iDSQnxIm0
>>229
うおおおおおお
その1行だけで動きました
ありがとうございます

マクロ記録ではなくググった記述の真似ですが検索が下手だったみたいです
2017/09/18(月) 21:49:23.00ID:m1CRg0zL0
userform2のcaptionをそのままuserform8のcaptionに代入使用しています。
型が一致しませんのエラーが出ます。
先ほどまで問題なく動いていたのですが、突然出るようになりました。
UserForm8.Caption = UserForm2.Caption

Dim FormName as string
FormName = UserForm2.Caption
Userform8.Caption = FormName

でもエラーが出てしまいます・・・。
2017/09/18(月) 21:59:25.32ID:jDUrs+BF0
>>234
何でそんなことやってるか知らんけど…

標準モジュールに書いたら動いた
Sub foo()
UserForm1.Caption = UserForm2.Caption
End Sub

とりあえずイミディエイトウィンドウやウオッチ士気で、
UserForm2.Caption
に何が入ってるか見てみたら?
2017/09/18(月) 22:04:09.39ID:d9P11nJN0
Str_NowRng=FindRange.Offset(0,1).address
Str_ShuName=FindRange.Offset(0,1).Value
With Worksheets(〃基礎〃)
i=4

Do While Str_ShuName=〃A〃
Worksheets(〃応用〃).Range(〃B〃&i).Value=.Range(〃Str_NowRng〃).Offset(0,1).Value
Worksheets(〃応用〃).Range(〃C〃&i).Value=.Range(〃Str_NowRng〃).Offset(0,2).Value
Worksheets(〃応用〃).Range(〃D〃&i).Value=.Range(〃Str_NowRng〃).Offset(0,3).Value+val(MSun).Value
Worksheets(〃応用〃).Range(〃E〃&i).Value=.Range(〃Str_NowRng〃).Offset(0,4).Value
Worksheets(〃応用〃).Range(〃F〃&i).Value=.Range(〃Str_NowRng〃).Offset(0,5).Value

Str_Name=.Range(〃Str_NowRng〃).Offset(1,0).Value
Str_NowRng=Range(Str_NowRng).Offset(1,0).address
i=i+1

Loop

i=14
Do While Str_ShuName=〃B〃
中身同じ
Loop

i=32
Do While Str_ShuName=〃C〃
中身同じ
Loop
こんな感じです。
パソコン見ながら打ったので間違って打ってたらごめんなさい。
2017/09/18(月) 22:04:38.56ID:jDUrs+BF0
〃応用〃
なんかかわいい
2017/09/18(月) 22:05:45.55ID:jDUrs+BF0
>>236
とりあえず>>232以上の回答はないと思うぞ
2017/09/18(月) 22:09:21.04ID:d9P11nJN0
>>232
ありがとうございます。すごい助かります。感謝です!
2017/09/18(月) 22:09:42.61ID:d9P11nJN0
>>238
はい。ありがとうございました。
2017/09/18(月) 22:09:56.31ID:m1CRg0zL0
>>235 ありがとうございます。 他のユーザーフォームではできましたので、USERFROM8自体がおかしくなっている?
直前にエクセルが動作停止しました。その際に壊れてしまい、USERFORM8のオブジェクト名を理解できていないようです。
そんなことはありますでしょうか?
2017/09/18(月) 22:13:12.43ID:jDUrs+BF0
>>241
さーねぇ。まぁあるかないかならあると思うけど、安易に答えは出さないけど、
どうでもいいマクロならさっさとuserform8消して新しく作り直すほうがいいかもな
2017/09/18(月) 22:25:10.48ID:SpW0zo9eH
>>226
>>229の言う通り

ws1.Activate
ws1.Cells(r, 4).Select
Selection.Resize(1,6).Select
Selection.Copy
ws2.Range("a6:a11").PasteSpecial (xlPasteValues)



ws1.Cells(r, 4).Resize(1,6).Copy
ws2.Range("a6:a11").PasteSpecial xlPasteValues

でOK。
1行ずつ意味を考えて上達して行こう。
ところで、PasteSpecialの後ってカッコ無しでスペースだよね。
2017/09/18(月) 22:34:50.16ID:xepoeGeEa
>>227
インデント統一してる?
俺は4つ(標準)にしてるけど、少しでもズレてる所があると気持ち悪い。
こういうコード貰ったらCtrl + A押して、
Shift + Tabを連続20回ぐらい押してしまう。
んで、全ての行のインデント振り直す。

それから、2つのシート使ってるようだけど自分ならそれぞれを変数に入れるな。
1つはWith使ってるから良いとして、もう1つだけでも変数に入れる。
まあ、自分の場合は基本的にブックから省略しないのでWithや変数に入れないと長くなるんだわ。

それからDo While〜Loopの中だけど、Offsetとiの併用してるのは何で?
全部iで書き直したら?
そうすればStr_ShuNameとかStr_NowRngとか必要無くなるよ。
Str_ShuNameの場所もi使って1つずつ下がって行くんでしょ。
Do Whileの条件もi使って表したらStr_ShuNameへの代入も必要無いよね。

それから、Range("B" & i ).Valueって記述だけど、RangeじゃなくてCells使えば列方向もj使って繰り返しが使えるよね。
まあ、真ん中だけ少し違うから恩恵少ないけど。
2017/09/18(月) 22:45:05.41ID:jDUrs+BF0
>>244
sublimnetextとか使ってみてはどうだろう
コピペするだけであら不思議、自動インデント
https://i.imgur.com/rexlwm0.png

VBEと連携できたら便利なんだけど、残念ながらできない
2017/09/18(月) 23:05:45.45ID:xepoeGeEa
>>245
自動でやるならmougでsmart indenter紹介してたな。
多分連携できるはず。
2017/09/18(月) 23:28:32.94ID:jDUrs+BF0
>>246
うお、こんな便利なもんあったのか
ありがとう早速試してみる
2017/09/18(月) 23:32:57.67ID:2tW0i3mn0
>>221
それはテクニック。質問者は
「セルB4から始めて、右に8列‘’○‘’を順番に書き込んでからB5に下がってまた8列書き込む。それを10行繰り返す」方法を訊いている。
2017/09/19(火) 08:03:42.97ID:S/ELy/wxd
学習指導要領的なアレ
2017/09/19(火) 08:41:07.80ID:TQtJdwms0
>>248
でも二重ループでセルを回すとか、実際にはやらない、というかむしろやっちゃいけないようなこと質問されてもね
2017/09/19(火) 09:07:55.93ID:llsJeX6S0
>>250
やっちゃいけないってなんだよw
foreach in rangeって言いたいんだろうけど、excelは行列の削除があるから二重ループでいいだろう
セルじゃなければforeachでいいけどな
2017/09/19(火) 11:43:23.74ID:3hwVeuBP0
列数 = 8
行数 = 10
Range("B4").Resize(列数, 行数).Value = "○"
2017/09/19(火) 12:11:26.47ID:JjVbyw/1a
>>248
初心者は設計に問題がある場合が多いわけで。
真面目に回答してもすったもんだして結局>>221が採用されることも多い。
質問の仕方もダメダメな場合が多いから、回答も段々きつくなる。

>>251
すべきじゃ無いのはむしろセル回す方だと思うが。
配列からの一括挿入にすべきだろ。
254デフォルトの名無しさん (オッペケ Sr4d-ZzG1)
垢版 |
2017/09/19(火) 12:22:40.32ID:hROBZ5mLr
問題もクソもこういう場合質問者はループを回したいなど微塵も思ってない
無知ゆえに質問の仕方がぎこちないだけだ
教えたがりならそれくらい察しろよ
2017/09/19(火) 12:37:00.77ID:k/2scTwdd
二重ループってのもある種のテクニックだから、そのやり方を訊いているのかも知れん。for nextでカウンタiとjを使って...とか。
そうでないなら、例えば、同様の効果を得る処理時間の短い方法を知りたいなどと訊くべし。
2017/09/19(火) 12:58:00.95ID:JjVbyw/1a
>>254
それを察したから>>221を書いたんだろ。
したら>>248の突っ込みが入って今に至ると。

それと初心者の場合、無知なんじゃ無くて自分で色々試してみるということをしないが故ということも多い。
動く結果を欲しがり、動く仕組みを自分のものにしない。

質問でRange("K15:O20")などと出てくるだけでガッカリ。
その範囲は今問題になってるお前の表そのものだろと。
結局貰ったコードそのままコピペして使うんだろうなと想像ついちまう。
2017/09/19(火) 13:16:12.83ID:GpDcdeuu0
「何をどうすればいいのか見当がつかない」というのは根本を理解していないが故だしな。

それにVBAはだいたいネット検索すれば解決策が載ってるんで(凡例が少ないという事はあるけど)、
自分で解決してから「こういう方法以外にどのような解法があるか」と聞いてくるのが一番正常なのかもしれないね。
2017/09/19(火) 14:10:03.77ID:S/ELy/wxd
初心者がいるってことは新規参入者がいるってことなので、考えようによってはありがたいことだ。
259デフォルトの名無しさん (ワッチョイ 398b-MDSF)
垢版 |
2017/09/19(火) 21:47:07.38ID:r8s5qxxU0
つべこべ文句言ってねえでお前らなんかに質問してくれるだけ有り難いと思えよ
260デフォルトの名無しさん (スプッッ Sdf3-uHQa)
垢版 |
2017/09/19(火) 23:27:39.48ID:44Sr5E9Ld
ここはVBAの作成依頼もOKですか?
2017/09/19(火) 23:28:15.16ID:llsJeX6S0
>>260
内容による
とりあえず内容書いてみればok
262デフォルトの名無しさん (スプッッ Sdf3-uHQa)
垢版 |
2017/09/19(火) 23:38:49.19ID:44Sr5E9Ld
>>261
B2〜B40までのセルをダブルクリックすると検索ボックスが出てきてE2〜E25までのデータを検索出来るようにしたいです(実際のデータは1500個くらいありますが)
検索ボックスにaと入力するとaを含むデータがリスト化されて出てきて、そのリストをダブルクリックするとBの列にそのデータが貼り付けされる
っていうのを作りたいです
http://imgur.com/gMJqp1I.jpg
2017/09/19(火) 23:46:09.19ID:awnco+f70
なんで(R1C1形式じゃなくて)A1形式なんだろうなぁ。あれ(A1形式)って感覚的に分かるの?
264デフォルトの名無しさん (ワッチョイ 398b-ZzG1)
垢版 |
2017/09/19(火) 23:54:26.79ID:r8s5qxxU0
バカはいつも突然やってくる
2017/09/19(火) 23:54:28.98ID:llsJeX6S0
>>262
とりあえず写真じゃなくスクリーンショットで頼む
モアレになって鬱陶しい

要するにE列を文字列で絞り込んでB列に貼り付けたいってことね

で、考えた
・openイベントでuseformをExcelとは別に動くようにshowする。要するに常時表示させる検索ウィンドウ。モーダルか、モーダレスか忘れた。
・テキストボックスに入力するとB列が次々と変化
1500ぐらいならリアルタイムで変化させても余裕だろう

誰も作って無かったら明日の夜作るよ
2017/09/19(火) 23:55:49.42ID:llsJeX6S0
>>263
分からん。全然分からん。
ただ既存のシートにマクロでclearcontentsする時はA1形式にする事はよくある
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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