Excel VBA 質問スレ Part61

■ このスレッドは過去ログ倉庫に格納されています
2019/04/25(木) 23:41:03.61ID:rni/4bMj0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part60
https://mevius.5ch.net/test/read.cgi/tech/1552736349/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/04/30(火) 10:29:21.50ID:B8o2e8qC0
あると断定するよりないと断定するのは難しいよね
単に自分が見つけられなかっただけでは断言なんてできないし

>>136
確認しなくても、ない根拠を示せば相手も黙るのでは
2019/04/30(火) 11:58:35.51ID:Cm5pFeJF0
まだやるの?
それとも別人?
2019/04/30(火) 15:31:13.13ID:GJKpnzP30
まだやるも何も完全に論理破綻してるけど自ら白旗挙げたことに気付いて無くて悔しいから、最後まで何か言ってれば負けたことにならないと信じてるアホがいるだけ。

MSに確認しなくても説得力ある話をすれば良かったのに、今となってはそれも手遅れ。
説得力が必要無いなんて、じゃお前は何でここに居るんだよwというくらいのアホ。
2019/04/30(火) 15:32:27.45ID:GJKpnzP30
>>138
前から、怪しい奴が横から沸いてたw
アホらしいから取り合わんけどね。
2019/04/30(火) 15:34:04.83ID:Op13jVvhx
別スレ立ててやれ
2019/04/30(火) 15:42:55.36ID:Cm5pFeJF0
>>139-140
>>134

>>141
前スレから粘着するぐらいだからもう無理でしょw
2019/04/30(火) 15:48:48.77ID:GJKpnzP30
>>142
論理無しでも最後まで口を出せば負けないと思ってるアホw
2019/04/30(火) 16:55:50.87ID:eh3I/jd8M
言いたいことは>>136に書いてある
2019/04/30(火) 19:10:51.36ID:S6hYz9760
よし、わかった。
ここをExcel VBAスレにするのは平成までにして、
令和からは、ドキッ!丸ごと水着女だらけの水泳大会スレにすれば、
すべて解決する。
2019/04/30(火) 19:18:15.59ID:R0S1ON6+M
ネーミングの昭和感
147デフォルトの名無しさん (ワッチョイ 1dda-jER+)
垢版 |
2019/05/01(水) 01:54:30.18ID:MPaYicsf0
なあもういい加減やめようぜ
2019/05/01(水) 08:45:56.07ID:R08QdVRL0
止めつつ上げるとかネタやん
2019/05/01(水) 13:34:20.87ID:XHmxZYyQ0
最初の質問者は問題解決したのかな?
2019/05/01(水) 19:19:03.05ID:xlz/SFXed
戯れ事を指摘したことの根拠は戯れ事を否定する根拠が無かったことなのにな。

何にも根拠が無かったら発言しなければ良かったのに。
2019/05/03(金) 19:41:21.80ID:o4X+Dt2l0
1 安倍晋三 アベシンゾウ
2 麻生太郎
3 小泉純一郎
4 白石麻衣



全員にフリガナをふりたい
今手動で名前をカット→貼り付けでフリガナをだしてます
それを自動でやる方法
または違うやり方があれば教えてください
ち、ちなみにjkです!
2019/05/03(金) 19:52:09.99ID:7e1y8fXo0
「あべ しんぞう」じゃなくて「あべ しん さん」で変換されてたら
ふりがなもそうなるし並べ替えでも読みで並べ替えされるし
2019/05/03(金) 19:54:51.80ID:gB5i9xO70
>>151
SEXしよう!

・関数
=PHONETIC(A1)

・vba
Sub foo()
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
Cells(i, 2).Value = Application.GetPhonetic(Cells(i, 1))
Next
End Sub

・その他
A1セルにカーソル併せてshit+alt+上でふりがなの設定が出来る
2019/05/03(金) 19:56:40.51ID:gB5i9xO70
書き忘れた
関数とvbaで挙動が変わる

関数は入力した時のふりがなデータを引っ張ってくる。漢字をコピペした場合、ふりがなデータが無い事がある
vbaはIMEのデータを引っ張ってくる。

どちらが良いかは無いが、基本的にはvbaの方が良い
2019/05/03(金) 20:52:09.59ID:o4X+Dt2l0
神様ありがとう!!
やっぱりここのおじさんたち凄い

>>152
それはあきらめてるw
2019/05/04(土) 06:46:34.61ID:TSubnBAw0
おばさんもいるよ!
2019/05/04(土) 10:24:42.71ID:4Z9Ig80ax
すげー加齢臭するなこのスレ
2019/05/04(土) 10:33:10.59ID:qNitGapX0
平均30-40ぐらいじゃないか。余裕で50代もいると思う
2019/05/04(土) 13:15:20.53ID:mcZWq4mnM
5chとしては普通でしょ
2019/05/04(土) 14:27:39.19ID:eVIwB2YR0
むしろ50代とかの方が多いんじゃね?
2019/05/05(日) 01:42:39.48ID:PgstIp0W0
windows3.1時代には既に有ったからね
dos版にもvbaって有ったの?
流石にそこまでは知らないんだけど
2019/05/05(日) 07:29:37.96ID:25zG6vKA0
>>161
> dos版にもvbaって有ったの?
ないでしょ
VBAはExcel 5.0からでそのバージョンにDOSはなかったはず
2019/05/05(日) 20:27:43.58ID:BF8MV8/50
指定する番号の行に
行を新規に追加するには
どう記載すれば、良いですか?
2019/05/05(日) 20:41:12.12ID:XON7SXZQr
row(n).insert
nは数値
2019/05/05(日) 20:42:27.10ID:AcwGW1cm0
>>163
Rows(123).Insert
2019/05/05(日) 20:45:05.57ID:XON7SXZQr
sが抜けてましたね
すまんかった
2019/05/05(日) 20:45:39.14ID:IK0uVtFC0
Dim i As Integer
i = InputBox("数字を入力してください")
Rows(i).Insert Shift:=xlDown
2019/05/05(日) 21:40:51.68ID:BF8MV8/50
皆さん、ありがとう
試して報告させていただきます。
2019/05/05(日) 21:45:41.48ID:BF8MV8/50
>>164
nをfor next
で指定しても、動きますか?

エラーとなり、理由がわからず2日ここで止まってます。
2019/05/05(日) 22:22:12.93ID:jSkSyCW+d
コードも無いしエラーメッセ−ジも無いからエラーはよく分からんが、気になる点を1つ。

n行目に挿入されると、その行は何行目になるのかな?
2019/05/05(日) 22:29:34.83ID:pOOjaEue0
>>169
具体的に何行目に追加したいか書いたほうが良いと思う
一行だけじゃないのか
2019/05/05(日) 22:52:12.35ID:AcwGW1cm0
>>169
たぶん For に Step - が必要な案件と見た
2019/05/05(日) 22:56:04.02ID:AcwGW1cm0
>>169
いっぺんに何行も挿入したいときは
Rows("6:15").Insert
この例では5行と6行の間に10行いっぺんに入れて、元の6行が16行に移動してる
2019/05/05(日) 22:59:30.01ID:oCrXkNbC0
>>172
初めて挿入やった時に上から順に挿入してってぐっちゃぐちゃになったわw
2019/05/05(日) 23:12:10.31ID:BF8MV8/50
ありがとう、皆さん。お言葉に甘えて
Sub 行の挿入()
dim k As Integer
dim i As Integer
dim j As Integer
dim h As Integer

Set obj基本データ = Thisworkbook.Worksheets("基本データ")

h = 7
Do while obj基本データ.Cells(4,h).Value〈〉""

For i = 1 To obj基本データ.Cells(5,
h).End(xlDown).Row

k = obj基本データ.Cells(4,h).Value

j = obj基本データ.Cells(i+4,h).Value

ThisWorkbook.Worksheets(k+2).Rows(j).Insert

next i

h = h + 1
Loop
End Sub

回すと、
ThisWorkbook.Worksheets(k+2).Rows(j).Insert
のところで、実行時エラー'1004'
となります。
2019/05/05(日) 23:52:28.10ID:pOOjaEue0
>>175
構文はあってるけど、存在しないセルを参照している
多分jに0か、kに-2が入ってるとかそんな感じ
2019/05/05(日) 23:53:17.22ID:pOOjaEue0
変数の中身を確認して
確認方法はウォッチ式、イミディエイトウィンドウなどいろいろあるけど

msgbox j
msgbox k
ThisWorkbook.Worksheets(k+2).Rows(j).Insert

でも良い
2019/05/06(月) 00:20:05.87ID:50ISOOVP0
>>176
遅くにありがとうございました。

ご指摘のとおり、iに0が入るため、エラーになっていることがわかりました。

後は、空白セルを0と読み取らせない方法を調べてみます。

丸二日、エラーの理由がわからずに悩んでいました。

見ず知らずの方に助けてもらえて感謝です。ありがとうございました。
2019/05/06(月) 00:33:06.01ID:50ISOOVP0
>>178
j
でした。訂正します。
2019/05/06(月) 00:51:29.40ID:50ISOOVP0
>>176
IF j=0 then GoTo L1
を追加して、
エラーになるところを飛ばして解決しました。

ありがとうございました。
2019/05/06(月) 10:29:14.43ID:ZwYgATzZd
>>178
初心者は、問題がどこにあるのかに勘所が無いからこういう悩んで時間を使う経験をたくさんすると良い。
慣れれば5秒で気付く。

あと、Do〜Loopはいらない気がする。
hの代わりにiを使ってどうにかできると思うね。
2019/05/06(月) 10:30:20.40ID:ZwYgATzZd
>>178
間違えた。
hは列方向か。
2019/05/10(金) 16:54:45.46ID:SsAAf7AE0
VBA勉強中の者です。

Setステートメントを勉強しているのですが、オブジェクト型についてお聞きしたいです。RangeオブジェクトとかWorksheetオブジェクトなど、いろんなサイトなど見ても使いどころがよくつかめてないです。

どんなときに使うのか、教えてもらえるとありがたいです。
2019/05/10(金) 16:57:57.46ID:/nmPTcfU0
>>183
数値と文字列以外は全部オブジェクト
2019/05/10(金) 17:04:22.66ID:/nmPTcfU0
どんなときに使うのか、は一言で言うのは難しいが、基本的には保守のため

・何の変数か分からない時に名前をつける
range("a1:b2")だと何の範囲かはワークシート見ないと分からない
set 転記元 = range("a1:b2")
とすることで、そのrangeが何か一発で分かるようになる

ちなみに「何をするか」ではなく「何が入ってるか」を基準に命名すると後で分かりやすい
「何をするか」はfunctionの名前がそうなっているはずだ

・ある変数が2回以上登場する場合、最初に変数に入れておけばそのコードを変更する時に一回で済む
まぁこれは説明せんでもええわな

・保守しないならめんどくさいだけじゃん
そう、合っている
ちゃんと保守できるように書いて置いた方が、長い目で見ると楽なんだ。プラマイプラス
2019/05/10(金) 19:25:57.30ID:ZL9lN1sfd
>>184、185
レスありがとうございます。
185さん
感覚ですが、すごく単純な感じがします。そんな認識でよいです?

ただ184さんのいう
数値と文字列以外は全部オブジェクト
これがひっかかるんです。

range("a1:b2")がオブジェクトという認識でよい?
そのなかに文字があった場合は?
文字列じゃない?と思ってしまうが、それは違うんですよね。
仮に
range("b2").valueだった場合は値で、range("a1:b2")はオブジェクトという事?

はなしがまとまってなくて、すみません。
2019/05/10(金) 19:27:02.31ID:ZL9lN1sfd
↑183が書き込みしました。
2019/05/10(金) 19:40:34.80ID:tGc5sWC60
Excelのシート内部の表位置とかカラム位置とかデータ末尾とか特定するベストプラクティスってどんなんですか!

何十年前からある言語でこんだけ普及してるのにいまだに決まった答えがないとか
2019/05/10(金) 19:44:21.41ID:tfYAY6pzM
>>188
あのね、A1から使うのがExcelの正しい使い方なの
枠やらタイトルやら付けるのはバカジャップの間違った使い方なの
2019/05/10(金) 19:52:43.30ID:tGc5sWC60
一瞬で理解した
2019/05/10(金) 20:14:31.04ID:/nmPTcfU0
>>186
range("a1:b2")はオブジェクト。この中にプロパティとしてvalueやwidth、heightなどがある
もちろんrange("a1:b2").valueは文字列。

range("a1")に1が入っていて
range("a1")+2が3になるのは、range("a1:b2").valueが自動的に呼び出されて
range("a1").value+2になっているため

MSDNじっくり読んだほうがいいかもな
https://docs.microsoft.com/ja-jp/office/vba/api/excel.range(object)
2019/05/10(金) 20:16:01.36ID:/nmPTcfU0
>>188
最強はこのページの

<S6> 書式付きセルを除外する (UsedRange)
http://www.niji.or.jp/home/toru/notes/8.html

ケツから検索して見つかった奴が最後
2019/05/10(金) 21:34:51.98ID:ZL9lN1sfd
>>191
レスありがとうございます
誘導もありがとう!
じっくり読んでみます。
わからない所があったらまた聞くかもです。
中途半端な理解は嫌だし。さっかりと理解したいし。
2019/05/10(金) 22:33:38.03ID:Mw5h8bh90
プログラミングを理解するには、読むだけでなくとにかく実際に動かしてみることが大事
2019/05/11(土) 03:15:11.68ID:04x+b6lna
さっかりなw
2019/05/11(土) 08:20:45.16ID:0TYDlcnk0
>>194
そうですよね
やらないとわからないがほとんどです(T-T)

>>195
脳内変換ヨロシクです
2019/05/11(土) 19:56:32.57ID:C94O1bx/0
ADO使うと突然落ちるようになった。
何が原因J?
2019/05/11(土) 20:45:20.04ID:Y1ZlGg0p0
>>197
プロバイダはなに?
2019/05/11(土) 21:32:42.45ID:C94O1bx/0
>>198
Microsoft.ACE.OLEDB.12.0
PCによっては普通に実行できるので、原因がわからん。
2019/05/11(土) 21:36:03.53ID:pbKNvvnGa
質問です。
NumberFormatLocal = “yyyy””年””m””月””d””日””(aaa)”で書式の定義を変更しています。
NumberFormatLocal = ●“yyyy””年””m””月””d””日””(aaa)”

●の箇所に文字列を入れたいのですが”●”を入れるとエラーになります。解決方法はありますでしょうか?
2019/05/11(土) 21:40:16.93ID:C94O1bx/0
>>200
わからんけど、自動記録でやったものをコピペするとか。
2019/05/11(土) 21:46:39.70ID:VQwnSTgG0
マクロの記録取ってみたわ
ダブルコーテーションで括った中で、更にダブルコーテーションがいるっぽい
具体てt機にはこう

Selection.NumberFormatLocal = """あ""yyyy""年""m""月"""
2019/05/11(土) 21:46:58.83ID:pbKNvvnGa
>>201
解決しました。ありがとうございました。
2019/05/12(日) 02:13:17.21ID:anQ1bE+S0
もしかして、Access2016が入ってると、
Excel2013ではADO接続使えない?

Excel2013からAccess2016の参照で落ちるケースはググって見つけたけど、
ウチのはExcel2013からExcel2013で落ちる。
205デフォルトの名無しさん (ワッチョイ 375f-BEL3)
垢版 |
2019/05/12(日) 02:35:46.96ID:0u/cIV/f0
>>190
データとしてExcelを使う場合と、ドキュメントとしてExcelを使う場合とで、考え方がかわる。
2019/05/12(日) 08:45:07.80ID:OK9Y1i2P0
>>204
win下をdll検索して、複数見つかったらそれぞれ直接参照設定してみるとか
(単体で動いてるわけじゃない気もするから、期待薄かもしれんけど)
2019/05/12(日) 12:05:15.73ID:anQ1bE+S0
>>206
それもダメだったから、諦めてExcel2019買ったわ。
それだと普通に動いたから、
やっぱりExcel2013とAccess2016の組み合わせがダメだったみたい。

ありがとう。
2019/05/12(日) 16:17:36.32ID:UM6bazI+0
32ビット版だったとか?
2019/05/12(日) 17:19:48.24ID:anQ1bE+S0
>>208
Excel2013 ・・・ ADO接続OK
   ↓
Excel2013 + Access2016 ・・・ ここで突然落ちるようになる
   ↓
Excel2019 + Access2016 ・・・ 直った!

全部32bit。
本当は64bitにしたかったけど、ListViewとか、
一部使えなくなる機能があるので諦めた。
2019/05/12(日) 17:21:42.38ID:anQ1bE+S0
あ、Excel2013 + Access2016って、インストールの組み合わせ。
別に、Excel2013からAccess2016に接続しに行ったわけじゃない。
落ちたのは、Excel2013からExcel2013へのADO接続。
211デフォルトの名無しさん (ワッチョイ 375f-BEL3)
垢版 |
2019/05/12(日) 17:23:44.21ID:0u/cIV/f0
なんの話をしているのか他人にはさっぱりわからないw
2019/05/12(日) 18:10:56.69ID:w16fcO4J0
時刻がマイナスの場合

とは、if文でどうやってつくりますか?
2019/05/12(日) 18:20:18.19ID:O1RPDIWFM
>>212
マイナスの時刻など存在しない
If 1 = 2
2019/05/12(日) 18:23:52.94ID:w16fcO4J0
A−B=C

時刻の差のCがマイナス表示されるセルを

if文で
00:00:00
に直したいです
2019/05/12(日) 18:30:53.16ID:O1RPDIWFM
>>214
=TEXT(MAX(0, C), "hh:mm:ss")
VBAは要らん
2019/05/12(日) 18:33:52.80ID:w16fcO4J0
セルの設定ですね。
ありがとうございます。
217デフォルトの名無しさん (ワッチョイ 375f-BEL3)
垢版 |
2019/05/12(日) 20:06:16.73ID:0u/cIV/f0
プログラミングの初歩は大事なんだと思ったよ。

ある値のときは00時00分00秒にするという分岐を思いつかないんだから。
2019/05/12(日) 20:51:34.11ID:JDMVXB4ua
まあMIN/MAXを使って値をキャップするのは正統なプログラミングでは非常によく使われる方法だけど、
事務屋さんには意外と思いつかないかもね
2019/05/12(日) 21:54:23.80ID:UM6bazI+0
普通に時刻どうしで比較できるから、3分前とかそういうことかと思ってた
220デフォルトの名無しさん (ワッチョイ 375f-BEL3)
垢版 |
2019/05/12(日) 22:49:25.28ID:0u/cIV/f0
>>210
Office製品は基本的にバージョン違いを混在させられるようにはできていない。
2019/05/13(月) 07:47:02.77ID:J0xiSM4lM
>>220
そんなことはなくて条件満たせば使えるよ
https://www.microsoft.com/ja-jp/office/homeuse/attention4.aspx
2019/05/13(月) 09:04:58.38ID:bJahx30bM
>>219
時間と時刻
2019/05/13(月) 09:19:29.85ID:OGTR1ISy0
その前にいきなり時刻とか言い出した辺りでダメダメ。
人間が時刻と思ってるだけの可能性がある。

セルの書式や変数の型を元に説明しないのは、人間の目線で時刻と言ってる証拠。
2019/05/13(月) 13:56:52.37ID:p6Zrf1zY0
シャープで囲んでる人はちょっと
2019/05/13(月) 14:34:08.69ID:/2MppI/1M
VBAでは時刻と時間を Timeでずっとやり繰りしてたのに、c#で TimeSpan発見したときは叫んだわ
2019/05/13(月) 16:36:40.35ID:N0Eopnbu0
え?エクセルをADOでデータベースみたいに扱うこともできるの?
2019/05/13(月) 17:03:08.67ID:P7TvqqIDM
>>226
ちゃんと形式を整えておけば単純なSELECTなら使える
WHEREが機能するだけでOKってことならまあまあかな
JOINとかは当てにならないような気がする
DELETE, INSERT, UPDATE はもっと当てにならない
2019/05/13(月) 19:21:33.24ID:t89inGVt0
あてにならないってなんやねん
229デフォルトの名無しさん (アウアウクー MM8b-BEL3)
垢版 |
2019/05/13(月) 20:44:43.21ID:/95lNMvTM
>>228
他人だけど、ExcelのSQL操作はおまけ機能だから、標準SQLに対応してないから、やってみないとわからない。
2019/05/13(月) 21:00:39.75ID:N0Eopnbu0
まぁできちゃったらアクセスの立場ないわな
2019/05/13(月) 21:02:14.05ID:icbU5YOt0
SQL自体もう色々派閥が分かれすぎて
2019/05/13(月) 21:06:25.95ID:adbFFiEz0
>>229
馬鹿は死ねや
Accessのエンジンと同じだろ
233デフォルトの名無しさん (アウアウクー MM8b-BEL3)
垢版 |
2019/05/13(月) 21:10:27.82ID:/95lNMvTM
>>232
バージョンを気にしてくださいw
2019/05/13(月) 22:16:41.75ID:ErXZ/V3c0
>>226
出来るよ。
普通はやらないだろうけど、会社のPCにAccessが入ってないとか、
Accessは入ってるけど、事務のおばちゃんがExcelにしがみついて、
意地でも離さないとか、そういう状況で使える。

>>227
JOINは普通に使える。
2019/05/13(月) 22:42:40.28ID:ATfYCMP60
>>234
そうか、JOINも普通にできるのか...

「Excelもデータベースとして有効に使えるよね」なんて方向に行って欲しくない、という願望が
俺の心の中にバイアスを生んだようだ
2019/05/13(月) 23:05:59.93ID:RqskJpspx
というかPowerQueryやDAXでデータベース的な使い方が出来てしまうからな今のExcelは
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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