トップページtech
1002コメント361KB

Excel VBA 質問スレ Part41©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net2016/04/27(水) 04:11:46.79ID:Nk+oP5xR
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part40
http://echo.2ch.net/test/read.cgi/tech/1455817784/

※関連スレ
VBAなんでも質問スレ Part2
http://echo.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://echo.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 122
http://echo.2ch.net/test/read.cgi/bsoft/1461287268/
0497デフォルトの名無しさん2016/06/05(日) 10:18:15.27ID:iCXItJy9
>>495
(val)で渡されてしまうとは予想外でした。
確かにかっこを取ると参照で渡せました。
callでも問題なく渡せました。

>491-495
皆さんありがとうございました!

>>496
前スレで話題にあげたばかりだったのですね。
見ておけばよかった・・・ すみません。
0498デフォルトの名無しさん2016/06/05(日) 14:20:18.87ID:Uhyyv1sV
>>482
便利ですか?
が質問じゃないのか
0499デフォルトの名無しさん2016/06/05(日) 15:24:31.11ID:pdmfsKht
質問です。

シートで1セルの範囲に"Hoge"という名前を付けると
VBA側でRange('Hoge").valueでセル値の内容を確認することが出来ますが、
処理実行中にこのコードに来る前に、他のBookがActiveになると、
このコードが実行されるときにエラーになります。

これはつまりExcel側がら名前を付けた範囲の情報がBookの情報を持っておらず、
シート情報からしか持っていない為に起こる事象だと思うんですが、
ThisWorkbook.Rangeというプロパティは存在しないので
ThisWorkbook.Range("Hoge").valueとも書けないですし、
このコード直前でThisWorkbook.Activateとしても結局は再現性の低いバグになるだけで、
根本的な解決にならないのは分かります。

名前付き範囲を使ったままで何か良い解決策はないでしょうか?
0500デフォルトの名無しさん2016/06/05(日) 15:42:08.47ID:WJNSNmMN
ThisWorkbook.Worksheets(1).Range
0501デフォルトの名無しさん2016/06/05(日) 15:50:22.50ID:pdmfsKht
>>500
Sheet1にそんな名前付き範囲はないって怒られました
0502デフォルトの名無しさん2016/06/05(日) 15:54:11.18ID:3QH2XO7h
>>499
ThisWorkbook.Names("Hoge").RefersToRange
でRangeオブジェクトを取得するのはどう?
0503デフォルトの名無しさん2016/06/05(日) 15:59:35.92ID:TevpUqb3
application.Names.Item(1)
0504デフォルトの名無しさん2016/06/05(日) 16:09:01.41ID:pdmfsKht
>>501
取れました。ありがとうございます!

実は教えて頂く前に名前付き範囲からシート名とアドレスを取得して再構成して
読み出す方法で自己解決したのですが、教えて頂いた方がシンプルですね。
ありがたく使わせて頂きます。

他の方々もありがとうございました。
0505デフォルトの名無しさん2016/06/06(月) 21:15:18.49ID:QZQfQuAS
また質問させてください。

列挙型をPublicで指定すると、確かに外部から指定出来るようにはなるのですが、
他の関数やプロパティのようにモジュール名.列挙型で指定できないみたいです。

他のモジュールで同じ名前の列挙型を指定すると
かぶってしまうと思うのですが、
それはかぶらないように名前を付けるか、
或いは一つモジュールを用意してConstを
プロパティで引っ張るような方法しかないんでしょうか?

やたら一つのモジュールに区分なくConstを詰め込んで使いたくないし、
モジュールが都度増えて行くというのも分かり辛そうなので
何か良い方法があれば教えて頂けるとありがたいです。
0506デフォルトの名無しさん2016/06/06(月) 21:45:31.54ID:Ly2klPtx
>>505
いまのVBAはenumも使えるのか。初めて知った。

試してみたけど、
モジュール名.enum名.列挙子

でアクセスできたよ?
0507デフォルトの名無しさん2016/06/07(火) 07:09:05.47ID:hS8RF9CR
VBAのDo while〜Loopの条件式に論理式って使えないんですか?
AndとかOrです
0508デフォルトの名無しさん2016/06/07(火) 07:30:36.29ID:5Z2R8nag
>>506
ごめんなさい。出来ましたね。
インテリセンスが働かないので出来ないと思い込んでいました。
0509デフォルトの名無しさん2016/06/07(火) 07:31:01.29ID:wxocoQF4
>>507
使えるんじゃない?

使えない具体的な例は?
0510デフォルトの名無しさん2016/06/07(火) 08:18:39.71ID:hS8RF9CR
駄目ですね
大人しくIf文とかと組み合わせます
0511デフォルトの名無しさん2016/06/07(火) 08:31:37.46ID:HU9syj05
>>507
Do While A And B
というコードは使えるけど?
0512デフォルトの名無しさん2016/06/07(火) 08:33:21.12ID:WoNq4aYh
これかな
VBAで、Do Until 〜 loopを使おうとしているのですが、条件式をDo Until Range... - Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q134632328
0513デフォルトの名無しさん2016/06/07(火) 09:04:31.80ID:wxocoQF4
>>507
条件のところを関数にすれば良いよ
0514デフォルトの名無しさん2016/06/07(火) 09:27:12.79ID:TVhUeGo1
使えないと判断した507はどういうやり方したんだろう?
条件式全体を括弧でくくったか、Andの前後の式を括弧でくくってないとかだろうけど、
いろいろ試しそうなものだ・・
0515デフォルトの名無しさん2016/06/07(火) 10:56:27.79ID:hS8RF9CR
Andでやったらできました・・・
AndがOrみたいな役割になるんですね知りませんでした
みなさんどうもでした
0516デフォルトの名無しさん2016/06/07(火) 11:22:54.42ID:HU9syj05
>>515
そうですAndがOrみたいな役割になるんです(白目
0517デフォルトの名無しさん2016/06/07(火) 17:21:47.75ID:UOQYJ0iX
while/untilで条件が逆
Andの否定はOr

まあ、そういうことかと
0518デフォルトの名無しさん2016/06/07(火) 17:27:43.53ID:sZzqt4Xn
すみません、質問です。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_row_del.html
↑のサイトを見て勉強しているのですが、コード例1ではB列が0の行を
削除するようになっていますが、例えばBとCに数値があり、B×Cが
100以上の場合に行を削除するようにするには
 If Cells(i, 2).Value = 0 Then
をどのように書き換えればいいでしょうか。
0519デフォルトの名無しさん2016/06/07(火) 17:59:50.27ID:sOD3zpDI
 If Cells(i, 2).Value = 0 Then
       ↓
 If (Cells(i, 2).Value) * (Cells(i, 3).Value) >= 100 Then
0520デフォルトの名無しさん2016/06/07(火) 18:00:58.86ID:sOD3zpDI
Cellsの外のカッコいらんかったな
0521デフォルトの名無しさん2016/06/07(火) 18:48:59.31ID:sZzqt4Xn
ありがとうございます。
実行した所、実行時エラー13が出てしまいました。
Bの数値に小数点があるのですが、関係ありますでしょうか。
B×CをDに表示させ(Dは小数点無し)、Dを参照させましたが、
同じエラーが出てしまいます。
0522デフォルトの名無しさん2016/06/07(火) 19:02:38.77ID:HU9syj05
実行時エラー13て何だっけ?
0523デフォルトの名無しさん2016/06/07(火) 19:18:16.59ID:Ic9MVfcw
Office TANAKA - Excel VBAの実行時エラー[型が一致しません]
http://officetanaka.net/excel/vba/error/execution_error/error_13.htm
0524デフォルトの名無しさん2016/06/07(火) 19:27:44.96ID:HU9syj05
>>521
>B×CをDに表示させ
この時点でDは数値型に間違いないだろう。それと100を比較して実行時エラー13になるとは・・・
はて?
0525デフォルトの名無しさん2016/06/07(火) 19:58:48.10ID:xO/yIWhK
>>522
書き込むより検索したほうが早くないか
型ノ]不一致
0526デフォルトの名無しさん2016/06/07(火) 20:07:46.69ID:xO/yIWhK
>>521
http://stamp-uploda.com/src/file2030.jpg
ならんが

ついでにBに50、Cに6.5としてCを文字列にしても自動で型変換行って乗算は行われた

ステップインで
 If (Cells(i, 2).Value) * (Cells(i, 3).Value) >= 100 Then
まで進めて、イミディエイトウィンドウで
?Cells(i, 2).Value

?Cells(i, 3).Value
を見れば原因がわかると思う
0527デフォルトの名無しさん2016/06/07(火) 20:12:54.80ID:wxocoQF4
削除するとき行番号の大きい方からforで回したほうが良い
0528デフォルトの名無しさん2016/06/07(火) 21:33:26.82ID:sZzqt4Xn
みなさん、ありがとうございます。
イミディエイトウィンドウで原因が分かりました。
すみません、お騒がせしました。
0529デフォルトの名無しさん2016/06/07(火) 21:37:21.32ID:HU9syj05
>>525
ごめんなさいスマホだとつい億劫で
0530デフォルトの名無しさん2016/06/07(火) 21:38:15.15ID:HU9syj05
>>528
で具体的に何?
0531デフォルトの名無しさん2016/06/07(火) 21:54:06.30ID:xO/yIWhK
>>528
答え教えて〜ちょっと気になる
0532デフォルトの名無しさん2016/06/07(火) 22:02:37.05ID:oC37LPsM
セルの書式が文字列になってたとか数値と思ってたらスペースが入ってて文字列だったとか
0533デフォルトの名無しさん2016/06/08(水) 01:56:48.79ID:2INbON7T
sendkeysの処理が上手くいかないのです
マクロA終了→マクロB起動なら上手くいくのですが
マクロAからマクロBを呼び出す だと失敗します
マクロAを一旦終了させてからBに繋げる方法はないでしょうか
0534デフォルトの名無しさん2016/06/08(水) 02:11:49.12ID:bRA8ZG5u
>>517
単なる自分のつまらない勘違いでした・・・
みなさんに時間取らせて申し訳なかったです
0535デフォルトの名無しさん2016/06/08(水) 02:28:20.54ID:X5C6AThW
>>533じゃあマクロCがマクロAを呼び出して
そのあとマクロBをよんであげれば?
0536デフォルトの名無しさん2016/06/08(水) 09:19:43.97ID:wPaWM/F4
>>533
>マクロAを一旦終了させてからBに繋げる方法はないでしょうか
2行目に答えが・・
0537デフォルトの名無しさん2016/06/08(水) 16:07:47.23ID:2INbON7T
>>535

マクロCでAを呼んだあと続けてBも呼ぶと 全て含めて1つの処理 と見なされるみたいで
AからBを呼び出すのと変わらないです そうなると失敗してしまいます

>>536
一旦処理を終了する為にAの処理の終わりに 1秒後Bを呼び出す のタイマーをセットして
今は使用しているのですが、その1秒が惜しいです。0.1秒だと反応しないです。
タイムラグなしに処理を終わらせ再開する方法はないものかと質問させていただきました。
0538デフォルトの名無しさん2016/06/08(水) 16:15:03.03ID:BHUiZVaK
何がどう失敗してるのか分からん
0539デフォルトの名無しさん2016/06/08(水) 16:34:33.35ID:lKFv6c/R
>>537
どこかのセルにAが動作中か終了かの状態を表示しておいて
Bでそのセルを見てAが終了するまでループして待機するとか
0540デフォルトの名無しさん2016/06/08(水) 17:30:32.12ID:EJkZd8pq
SendKeys ってNumLockが解除されるバグとかあるから嫌い
APIとか使って代替した方がいいんじゃあ・・・
0541デフォルトの名無しさん2016/06/08(水) 19:15:25.42ID:k2i9YcBT
speakメソッドを使ってセルに入ってる英単語/英文を読ませる処理をしているのですが
長めの文を入れて読ませると読み上げてる途中は他のExcel操作が全くできません。
これを防ぐ方法はありますか?
他言語でいう別スレッドで実行させたいのですが。
0542デフォルトの名無しさん2016/06/08(水) 20:02:11.36ID:J4qccP96
>>541
非同期にしたい処理をvbsに逃がすくらいしか・・・
0543デフォルトの名無しさん2016/06/08(水) 20:08:46.59ID:J2Tk6QYU
>>537
それはキーの受け側の問題では?
高速なキー入力に反応出来てないんだと。
0544デフォルトの名無しさん2016/06/08(水) 20:16:02.98ID:k2i9YcBT
>>542
それは具体的にはどうすればいいのでしょうか?
VBAのコードからvbsを使うことはできる?
0545デフォルトの名無しさん2016/06/08(水) 20:27:54.30ID:P+TyVjZj
>>541
ちょっと調べたらSpeech APIなんてものがあるんだね。
面白そうだからトライしてみようかな
0546デフォルトの名無しさん2016/06/08(水) 20:33:09.37ID:8NxCW7kQ
>>544
こんな感じとか?

--- exelSpeech.vbs (適当なフォルダにファイル保存)-----------------
Dim exelAp
If WScript.Arguments.Count Then
  set exelAp = CreateObject("Excel.Application")
  For Each arg In WScript.Arguments
    exelAp.Speech.Speak arg
  Next
End if

--- Excel側マクロ ---------------------------------------------
Sub test()
  Call ExecVBS("d:\exelSpeech.vbs", "Hello", "Microsoft Speech ")
End Sub

Private Sub ExecVBS(strPath, ParamArray argv())
  Dim strWS As String
  strWS = "WScript.exe """ & strPath & """"
  For Each arg In argv
    strWS = strWS & " """ & arg & """"
  Next
  Call Shell(strWS)
End Sub
0547デフォルトの名無しさん2016/06/08(水) 21:18:47.33ID:IzbVLKR1
>>541
別プロセスでエクセル起動して使う
0548デフォルトの名無しさん2016/06/08(水) 21:39:22.56ID:P+TyVjZj
Speech API使ってテキストを読み上げることはできたが別スレッドで動いてくれない。
なぜダメなんだろう...
0549デフォルトの名無しさん2016/06/08(水) 22:07:45.81ID:P+TyVjZj
あ、できた
0550デフォルトの名無しさん2016/06/08(水) 22:56:43.83ID:zzDG0CvJ
>>548
リアルスレ違い?
0551デフォルトの名無しさん2016/06/08(水) 23:02:28.85ID:P+TyVjZj
>>550
いや>>541の問題

出来たには出来たけどdllが必要になる
0552デフォルトの名無しさん2016/06/09(木) 02:18:01.25ID:Y6zIWp2Z
Indirectで参照したセルを

for nextのループで空白セル削除すると上手くいかない

参照先のセルで条件判断しちゃうのだろうけど仕組みがイマイチ理解出来ないです...
0553デフォルトの名無しさん2016/06/09(木) 09:49:57.32ID:usJpFq2/
>>552
for関係なくない
どんなコードと数式書いてるの?
0554デフォルトの名無しさん2016/06/09(木) 11:34:40.11ID:joa/BeB6
>>551
dllが必要というのはわかったけど
ExcelのVBAのコードではなんの呪文を書けばいいのでしょうか?
0555デフォルトの名無しさん2016/06/09(木) 17:07:47.74ID:CPZKJ0rV
Sub test2()
Call SpeakAPI("Hello World")
End Sub

Private Sub SpeakAPI(SpeakText)
Const SVSFlagsAsync = 1  '非同期
  Set SpV = CreateObject("SAPI.SpVoice")
  Call SpV.Speak(SpeakText, SVSFlagsAsync)
  Do
    DoEvents
  Loop Until SpV.WaitUntilDone(10)
End Sub
0556デフォルトの名無しさん2016/06/09(木) 18:18:21.44ID:/Mjso7pS
これだけじゃ日本語は話してくれないのか
0557デフォルトの名無しさん2016/06/09(木) 19:16:56.26ID:5sPb0rLu
>>556
Window10だけど日本語話してくれたよ。
他の環境でも多分なんちゃら.msiをインスコすればOKなんじゃないだろうか。
0558デフォルトの名無しさん2016/06/09(木) 19:28:33.86ID:/Mjso7pS
うちがまだVISTAだってのがばれちゃうーw
0559デフォルトの名無しさん2016/06/09(木) 19:45:23.02ID:5sPb0rLu
>>555
読み終わるまでSub SpeakAPIから抜けないけどUIは受けるというわけか。
それでニーズは満たすのかもね。

>>558
7でもダメだった
0560デフォルトの名無しさん2016/06/09(木) 22:14:03.49ID:Nw1jdtR1
ローカルウィンドウもしくはウォッチ式について質問
変数名とか入力値で検索する方法ってないですか?
深い階層に有ったりどの変数に目当ての値が入ってるか曖昧な時にいちいち開くの面倒です
0561デフォルトの名無しさん2016/06/09(木) 23:00:19.61ID:WOvdLwlE
Do Loopで済むのに、
永久ループが怖くて、
無理矢理For Nextを使う俺は小心者。
0562デフォルトの名無しさん2016/06/09(木) 23:03:31.96ID:ehD8QNF8
>>561
せっかく用意されてる命令をなぜ使わないの
0563デフォルトの名無しさん2016/06/09(木) 23:31:40.65ID:usJpFq2/
>>561
俺もそうだった。ただdoloopってエクセルで使う機会は少ないと思う。
大体はfornext、foreachで事足りる。
ゲームだとdoloopは死ぬほど使うけどね
0564デフォルトの名無しさん2016/06/09(木) 23:47:41.71ID:zgYGqzoC
>>555
いいやり方だと思うけど、Set SpV = CreateObject("SAPI.SpVoice")の
SpVって変数の寿命が尽きると読み上げも止まっちゃうみたいだね。

だから別の Sub や Function の中にその "SpeakAPI"を組み込んで使う場合は
Do〜Loop の間は待ちが発生する。
0565デフォルトの名無しさん2016/06/09(木) 23:58:14.68ID:usJpFq2/
音楽ファイルをどこかに生成して、シェル(コマンドスクリプト)からその音楽ファイルを再生ってできないかな
そうすればエクセルと同期とか関係なしに再生できると思う
0566デフォルトの名無しさん2016/06/10(金) 00:16:09.21ID:3rMMNq1l
>>563
>ゲームだとdoloopは死ぬほど使うけどね

俺もそうだった
今はゲームではどちらもそうそう使わない
0567デフォルトの名無しさん2016/06/10(金) 00:28:38.18ID:3rMMNq1l
>>565
音楽ファイルならそんなことしなくてもsndPlaySoundやmciSendStringのAPIで行けると思う
05685552016/06/10(金) 03:53:33.12ID:WIrOC41u
>>564
グローバル変数とかにすればLoop待ちせず完全に非同期に出来るみたいね
…ついでにクラスモジュール化してみた

--- 標準モジュール(テスト用)
Private clsSpv As New SpeechAPI
Sub test()
  Call clsSpv.Speak("Hello World")
  Call clsSpv.Speak("Speech API Test")
End Sub

--- クラスモジュール(SpeechAPI.cls)
Private Const SVSFlagsAsync = 1  '非同期
Private objSpV As Object
Private Sub Class_Initialize()
  Set objSpV = CreateObject("SAPI.SpVoice")
End Sub
Private Sub Class_Terminate()
  Call Me.WaitSpeak 'Speak終了前に破棄されそうな場合は待機
  Set objSpV = Nothing
End Sub
Sub Speak(SpeakText)
  Call objSpV.Speak(SpeakText, SVSFlagsAsync)
End Sub
Sub WaitSpeak()
  Do
    DoEvents
  Loop Until objSpV.WaitUntilDone(10)
End Sub
0569デフォルトの名無しさん2016/06/10(金) 12:15:48.39ID:EYLL7b//
>>568
それだとデストラクタで、結局音声がなり終わるまで固まらない?
0570デフォルトの名無しさん2016/06/10(金) 12:22:38.95ID:4oO9NPCl
Stop、Pause、Resumeは自在に実装可能だね。
0571デフォルトの名無しさん2016/06/10(金) 12:32:42.79ID:EYLL7b//
>>570
いやいや、音声が 鳴ってる最中に次の処理に進める?
0572デフォルトの名無しさん2016/06/10(金) 15:33:45.40ID:i706FGHy
日本語でも話せるようにできてる人は漢字でも大丈夫なの?
もしいまWindows7で日本語も対応させるにはどこにいってなにをインストールすればいいのでしょうか?
0573デフォルトの名無しさん2016/06/10(金) 16:12:49.25ID:4oO9NPCl
>>572
漢字もかなりこなれた感じで読み上げてくれるよ。
MSSpeach_SR_ja-JP_TELE.msi というものをダウンロードすればいいんだと思うけど...違ったらゴメン
0574デフォルトの名無しさん2016/06/11(土) 01:47:26.20ID:02ogFup4
>>572
OS添付のSAPI5じゃなくMicrosoft Speech Platformを使う方法でなら

Microsoft Speech Platform - Runtime (Version 11)
https://www.microsoft.com/en-us/download/details.aspx?id=27225
 → SpeechPlatformRuntime.msi をダウンロード
Microsoft Speech Platform - Runtime Languages (Version 11)
https://www.microsoft.com/en-us/download/details.aspx?id=27224
 → MSSpeech_TTS_ja-JP_Haruka.msi をダウンロード

上記インストールして、コードを以下のように書き換える

Set s = CreateObject("Speech.SpVoice")
s.Speak "helloこんにちは"

※ オブジェクトの仕様はSAPI.SpVoiceとほぼ同じっぽい
※ OS標準のSAPI5用の無料音声合成エンジンは見つけられなかった
  Win8以降ならSAPIでも日本語対応しているっぽいけど…
0575デフォルトの名無しさん2016/06/11(土) 06:26:26.01ID:6cWsIMr7
>>574
そうなんだ。
Win10だと CreateObject("SAPI.SpVoice") のままでOKなんで油断した。
0576デフォルトの名無しさん2016/06/13(月) 09:25:34.07ID:8U53ckAC
A列とB列に1以上20以下の整数が200行ほど並んでます(数字は頻繁に更新される)
AセルとBセルの組合せの重複をチェックしたいのですが、どうやれば良いですか。

今はC列に(C1=A1*21+B1)の作業域を設け、n行が更新されるたびに
If Application.CountIf (Range ("C1:C200"), Cells(n,3)) > 1
とやってますが、少しでも時間短縮を図りたいのです。

つまりわかりやすさよりもスピード重視でお願いしますm(_ _)m
0577デフォルトの名無しさん2016/06/13(月) 10:22:42.66ID:wX9Pf1Mm
フィルターオプションの重複無視で件数が減っていれば重複あり
0578デフォルトの名無しさん2016/06/13(月) 12:00:42.36ID:+URgB/tG
>>576
数字の更新はどうやってるの?WEBクエリ?
頻繁の間隔は具体的にどれぐらい?1分置き?
チェックの結果は人間が目視するだけ?VBAか何かで利用?
0579デフォルトの名無しさん2016/06/13(月) 12:46:55.80ID:8U53ckAC
>>577
ありがとうございます!
フィルターオプション&重複でググって解決しました。
初心者故おかしいかも知れませんが、これで求めるチェックができました。
お陰で、作業域(演算)の分かなりのスピードアップが図れそうです。

Range("a1:b9").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
x = WorksheetFunction.Subtotal(3, Range("a1:a9"))

Range("a1:b9").AdvancedFilter Action:=xlFilterInPlace, Unique:=False
y = WorksheetFunction.Subtotal(3, Range("a1:a9"))

MsgBox y - x
0580デフォルトの名無しさん2016/06/13(月) 12:56:12.13ID:8U53ckAC
>>578
求める組合せをループ(バックトラック法)かけて延々と調べるものです。
具体的には4列(A-D)あって、次の4条件のしばりがあります。
A<>C
B<>D
A&B C&D 重複無し
A&D C&B 重複無し

力技で判定していたので、長時間かかって終わりそうになかったもので・・
0581デフォルトの名無しさん2016/06/13(月) 13:01:37.02ID:8U53ckAC
ちょっと違った・・
An <> Bn
A&B 組合せ重複無し
Cn <> Dn
C&D 組合せ重複無し
A&B C&D 組合せ重複無し
A&D C&B 組合せ重複無し
0582デフォルトの名無しさん2016/06/13(月) 13:05:35.50ID:8U53ckAC
すみません・・

An <> Cn
A&C 組合せ重複無し
Bn <> Dn
B&D 組合せ重複無し
A&B C&D 組合せ重複無し
A&D C&B 組合せ重複無し
0583デフォルトの名無しさん2016/06/14(火) 18:25:29.30ID:Z8NdG2eJ
質問です
マクロ使って画像みたいに並べるにはどうすればいいですか?
http://i.imgur.com/v4EXpRy.png
0584デフォルトの名無しさん2016/06/14(火) 18:32:15.29ID:4vHs6V7m
>>583
結構めんどくさい。ファイルアップロードしてほしい

コードでは
・結合を解除。しなくていいかもしれない
・数字以外だったらアルファベット「A」を取得。
・A1〜A列最終行までfornextループ。右に書き出していく
・D列以降も同じように処理

って感じだと思う
0585デフォルトの名無しさん2016/06/14(火) 18:38:15.24ID:9fCSALMI
>>583
あははは、うちの会社にも画像左みたいな意味不明のデータを作ってドヤ顔するウルトラバカがいるぞww
「データっつうのは一行単位じゃなきゃ使い回しが効かないだろ!」って何度か言ったがバカだから聞く耳を持たん。
0586デフォルトの名無しさん2016/06/14(火) 18:39:33.60ID:4vHs6V7m
>>585
それもかっこ悪い
正規化とか言葉はちゃんと覚えよう
0587デフォルトの名無しさん2016/06/14(火) 18:41:50.36ID:wwwgAdKU
>>583
A列を上から下に見ていって
数字だったら3列コピーする

別に配列とかDictionaryとかで
1からA
2からB
4からC
12からD
など、設定しておく
数字を見てABCDなどを選択する
0588デフォルトの名無しさん2016/06/14(火) 18:43:13.12ID:wwwgAdKU
>>586
RDB用語を使っても知らない人には伝わらない
0589デフォルトの名無しさん2016/06/14(火) 19:15:10.20ID:e7Hp4H4t
そらそうだ
0590デフォルトの名無しさん2016/06/14(火) 19:19:40.65ID:e7Hp4H4t
むりやりシステム用語を使うとしたら、「モデルとビューを分離しない馬鹿」もしくは
「モデルを軽視しビューばかり気にする馬鹿」とでも呼べばいいだろうか。
0591デフォルトの名無しさん2016/06/14(火) 19:45:19.02ID:V0YHD+Ca
>>583
pass=vba
http://up2.karinto.in/uploader/download/1465901074.zip
0592デフォルトの名無しさん2016/06/14(火) 20:54:15.20ID:hZWdJI0J
そもそも Excel で正規化って言われてもなぁ...
0593デフォルトの名無しさん2016/06/14(火) 21:18:53.56ID:lCHHR3y2
商品番号、2015年4月、2015年5月、2015年6月...ってフィールドが並んでるAccessファイル見たことあるし、
データの取り扱いと保存方法についてはしっかりと勉強させるべき。
0594デフォルトの名無しさん2016/06/14(火) 21:52:42.76ID:8twB5jbW
「ダミー2」という項目がキー項目になっている恐怖・・・
0595デフォルトの名無しさん2016/06/14(火) 23:43:30.88ID:OpO/Jdo0
Application.GetOpenFilenameでファイルを選択するダイアログを
出すんだけど、そのときにいつも決まったフォルダ(ネットワーク上の
共有フォルダ)を開くのには、どうすればいいでしょう。

Application.DefaultFilePath = "\\hoge\foo"

としてみたけど直前にexelでファイルを読み書きしたフォルダを
開く様子。
0596デフォルトの名無しさん2016/06/14(火) 23:58:37.04ID:4eYpAyq0
>>583
ワロタ。

うちの会社にもいるわ。
表より、制作者の頭直したほうがいいレベル。
■ このスレッドは過去ログ倉庫に格納されています