Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


130 / 3841 ページ ←次へ | 前へ→

【79867】Re:セルの値に対応した文字
発言  マナ  - 18/5/2(水) 14:45 -

引用なし
パスワード
   ▼でーすけ さん:

数式の質問でしょうか?
・ツリー全体表示

【79866】セルの値に対応した文字
質問  でーすけ  - 18/5/2(水) 14:33 -

引用なし
パスワード
   A1:A500にいろいろな文字が入っています。
その中で特定の文字列の時にB1:B500へ決まった文字を入れたいと思っています。
Vlookupの様に複数検索するのではなく、2種類のみです。

例:りんごの時だけB列に「商店A」を入力、
  すいかの時だけB列に「要点B」を入力、
  それ以外は何もしない。

 A    B
りんご  商店A
みかん
なし
りんご  商店A
すいか  商店B
メロン
りんご  商店A
かき

以上、よろしくお願いいたします。
・ツリー全体表示

【79865】Re:エラーメッセージ
発言  よろずや  - 18/5/2(水) 13:01 -

引用なし
パスワード
   ▼Err さん:
>結合セルの左端以外が空白と判定されます。
Excelの仕様です。

そこまで分かっているなら、そこを外せばいいだけですが、何か?
・ツリー全体表示

【79864】Re:エラーメッセージ
発言  Err  - 18/5/2(水) 12:20 -

引用なし
パスワード
   ▼γ さん:
>不明な点を具体的に質問して下さい。
>
>すでにコードがあるようですが、これはどのようなものですか?

隣のセルが空白なら先に入力を促すマクロです。

>あなたが作ったものなら、修正は可能だと思いますが。

私は、作っておりません。

>・エラーが出るなら、エラーメッセージを示してください。

エラーメッセージは、出ていません。

>・想定と異なるなら、想定と現実をそれぞれ具体的に説明してください。

結合セルに適用したいのですが、結合セルにすると
結合セルの左端以外が空白と判定されます。
・ツリー全体表示

【79863】Re:エラーメッセージ
発言  γ  - 18/5/1(火) 21:25 -

引用なし
パスワード
   不明な点を具体的に質問して下さい。

すでにコードがあるようですが、これはどのようなものですか?
あなたが作ったものなら、修正は可能だと思いますが。
・エラーが出るなら、エラーメッセージを示してください。
・想定と異なるなら、想定と現実をそれぞれ具体的に説明してください。
・ツリー全体表示

【79862】Re:Excel VBAによるpowerpointの操作につ...
回答  よろずや  - 18/5/1(火) 15:48 -

引用なし
パスワード
   ▼ぼう さん:
>他に何か考えられることはありませんかね、、

あとは、Mac版のVBAがどこまで互換性を持っているかだと思います。
どっかのページで、Office for Mac版のVBAは保証しないと書いてあったように記憶しています。
・ツリー全体表示

【79861】エラーメッセージ
質問  Err  - 18/5/1(火) 14:56 -

引用なし
パスワード
   エラーメッセージで質問です。

E10:Z11・E13:Z14、E17:Z18・E20:Z21、E24:Z25・E27:Z28、E31:Z32・E34:Z35の結合セルです。
ここがNo.1の入力セルが2段あります。

AE10:BF11・AE13:BF14、AE17:BF18・AE20:BF21、AE24:BF25・AE27:BF28、AE31:BF32・AE34:BF35の結合セルです。
ここがNo.2の入力セルが2段あります。

BL11:BU13、BL18:BU20、BL25:BU27、BL32:BU34結合セルです。
ここがNo.3の入力セルが1段あります。


No.1に値が入力されていればNo.2に入力できる。
No.1に値が入力されていなければ、No.2及びNo.3には入力できずにエラーメッセージでNo.1を入力して下さい。
No.2に値が入力されていればNo.3に入力できる。
No.2に値が入力されていなければ、No.3には入力できずにエラーメッセージでNo.2を入力して下さい。

セルの一番上で説明致しますと、以下のようになります。
E17:Z18・E20:Z21以降も同じです。

E10:Z11・E13:Z14のどちらかに値が入力されていれば、AE10:BF11・AE13:BF14に入力できる。
E10:Z11・E13:Z14の両方が空白ならば、AE10:BF11・AE13:BF14とBL11:BU13は入力できずにエラーメッセージでNo.1を入力して下さい。

AE10:BF11・AE13:BF14のどちらかに値が入力されていれば、BL11:BU13は入力できる。
AE10:BF11・AE13:BF14の両方が空白ならば、BL11:BU13は入力できずにエラーメッセージでNo.2を入力して下さい。

このような処理を行いたいのですが、参考コードを
どのように直せば良いのでしょうか?
ご教授下さいませ。
宜しくお願い致します。


以下参考コードです。

Private Sub Worksheet_Change(ByVal target As Range)

 If (target.Row >= 10 And target.Row <= 11) Or _
   (target.Row >= 13 And target.Row <= 14) Or _
   (target.Row >= 17 And target.Row <= 18) Or _
   (target.Row >= 20 And target.Row <= 21) Or _
   (target.Row >= 24 And target.Row <= 25) Or _
   (target.Row >= 27 And target.Row <= 28) Or _
   (target.Row >= 31 And target.Row <= 32) Or _
   (target.Row >= 34 And target.Row <= 35) Then

  Select Case target.Column
   Case 31
    Call ShowErrMsg2(target, -1)
   Case 64
    Call ShowErrMsg2(target, -2)
  End Select
  
 End If
End Sub


Sub ShowErrMsg2(ByVal target As Range, offsetCol As Integer)

 Dim result
 Dim num As Integer
 Dim errArray As Variant
  
 errArray = Array("大項目", "中項目", "小項目", "規格", "数量")
 If target.Column > 7 Then
  num = target.Column - 7
 Else
  num = target.Column
 End If

 If target.Cells.Offset(0, offsetCol) = "" Then
  If target.Cells <> "" Then
   result = MsgBox( _
        Prompt:=errArray(num + offsetCol - 1) & "を入力してください!", _
        Buttons:=vbRetryCancel + vbCritical, _
        Title:="警告")
      
   Select Case result
    Case vbRetry
     target.Cells.Activate
     Application.SendKeys _
           "{F2}" & _
           "{Left " & Len(ActiveCell.Value) & "}" & _
           "+{Right " & Len(ActiveCell.Value) & "}"

    Case vbCancel
     target.Cells = ""
     target.Cells.Activate
   End Select
  End If

 Else
  If target.Offset(0, -1) <> "" And offsetCol = -1 Then
   Exit Sub
  End If

  offsetCol = offsetCol + 1
  Call ShowErrMsg2(target, offsetCol)
 End If
  
End Sub
・ツリー全体表示

【79860】Re:Excel VBAによるpowerpointの操作につ...
質問  ぼう  - 18/5/1(火) 13:37 -

引用なし
パスワード
   一応それは、Macでは「/」、Windowsでは「\」で、両者ともファイルを開くことができることが確認できています。(一応ご指南頂いた方法は取ることにします、ありがとうございます。)
ということで別の要因だと思われます、、
他に何か考えられることはありませんかね、、
・ツリー全体表示

【79859】Re:Excel VBAによるpowerpointの操作につ...
発言  よろずや  - 18/5/1(火) 9:23 -

引用なし
パスワード
   >区切り記号については、適当なファイルのパス(わたしが使ったのはThisWorkbook.Path)をメッセージとして表示するプログラムを別で組んで、「/」であることを確認しました。
定数「/」ではなくApplication.PathSeparatorを使えばMacとWindowsの両方で使えます。
・ツリー全体表示

【79858】Re:Excel VBAによるpowerpointの操作につ...
質問  ぼう  - 18/5/1(火) 8:43 -

引用なし
パスワード
   ご回答ありがとうございます
区切り記号については、適当なファイルのパス(わたしが使ったのはThisWorkbook.Path)をメッセージとして表示するプログラムを別で組んで、「/」であることを確認しました。逆に「/」以外だと、PowerPointファイルを開こうとした時点でPowerPointが落ちてしまう(わたしが載せたコードであればファイルを開くところまではできる)ので、区切り記号はあっていると思われます。
他に何か可能性はありませんでしょうか…?
・ツリー全体表示

【79857】Re:複数条件での最大日付取得
お礼  tsujio E-MAIL  - 18/5/1(火) 8:04 -

引用なし
パスワード
   ▼マナ さん:
なるほど、1つずつセルを見ていくよりもそのほうが合理的な気がしますね。

処理速度も多少速くなるような。

ありがとうございます。

>▼tsujio さん:
>
>>さきほど【79840】でご教示いただいた方法をマクロに置き換え思ったとおりの結果を得ることができました。
>
>こんな考え方でもよいかも。
>
>Option Explicit
>
>Sub test()
>  Dim i As Long
>  Dim 最終列 As Long
>  
>  For i = 2 To 4
>    最終列 = Cells(i, Columns.Count).End(xlToLeft).Column
>    If 最終列 >= 3 Then
>      MsgBox Cells(1, 最終列).Value
>    End If
>  Next
>    
>End Sub
・ツリー全体表示

【79856】Re:中国語(簡体語)を含むファイル名の取得
お礼  とらこ  - 18/4/30(月) 11:16 -

引用なし
パスワード
   ▼γ さん:

>(Q)そもそもそのファイルは、explorerからダブルクリックでは開くのですか?
ご指摘の通りでした…ファイルが破損が原因で、ファイル修正後、
正常に動作いたしました。


この度は、何度も余計なお手間を取らせて申し訳ございませんでした。
また、質問の仕方へのアドバイスまでありがとうございました。
次回に活かしたいと思います。
・ツリー全体表示

【79855】Re:セルの関数で使用している文字列を半...
発言  γ  - 18/4/30(月) 9:49 -

引用なし
パスワード
   Microsoftのフォーラム
ht tps://social.msdn.microsoft.com/Forums/ja-JP/52f7099a-6290-493b-9014-c4094f5e5033?forum=vbajp
で解決したようですが、こちらは正解が提示されているのに放置でしょうか?

マナーを守ってくださいね。

(本サイトの基本方針から引用)
> マルチポストについて
> 別のサイト(掲示板)にまったく同じ目的の投稿をすることを、一般に「マルチポスト」といいます。当質問箱では、マルチポストは原則認めています。つまり、ほかのサイトで質問したことをこのサイトで質問してもかまわないということです。
>
> しかし、もしマルチポストをするのなら、可能な限り「○○にも同じ質問を出しました」ということを宣言してください。そして、仮に他のサイトで解決したのなら、ここにも必ずその顛末を書いてください。質問しっぱなし、というのはモラルに反します。「解決したからいいや」というのではありません。

----------
ところで、あちらの解決しましたというコードについて言えば、
カタカナが1文字でも含まれているものに限定していますね。
カタカナは含まない場合の、全角の英数字が全角のまま残ってしまっています。
また、繰り返しのなかで何度もCreateObject("VBScript.RegExp")している点も改善すべきでしょう。

一方、亀マスタさん作成のコードは、漏れなく半角に変換されます。
正規表現を持ち出すまでもないということですね。


----------
ちなみに、
>セル参照のシート名はそのままにすることはできませんでしようか?
実は、
  For Each rTarget In Sht.UsedRange
    rTarget.FormulaLocal = StrConv(rTarget.FormulaLocal, vbNarrow)
  Next
とすれば、
シート名に全角カタカナが使われていて、シート名を半角に変換したものを
入力しても、「Excelが気を利かせて自動的に元の全角と認識してくれる」ようですね。
ですから、関数部分もシート名の部分も含め、
単純に上の処理でも結果オーライになっていたはずです。

これはやってみないと中々気づかない点ですな。

----------
なお、半角カタカナを求める指示そのものに違和感があります。
いまやビジネス現場でも半角カタカナは余り使用されないはずです。
・ツリー全体表示

【79854】Re:中国語(簡体語)を含むファイル名の取得
発言  γ  - 18/4/29(日) 22:36 -

引用なし
パスワード
   > 人名を含んだファイル名のため、中国人社員のファイル名を取得する際、
> ファイル名の一部が「?」となり、文字化けしてしまいます。
この文字化けは、どこに表示されたもののことですか。正確に表現して下さい。

ファイルが開かないということのほうが重要とのこと。
(Q)そもそもそのファイルは、explorerからダブルクリックでは開くのですか?
(Q)マクロからはどのように開いているのですか?
(Q)そもそも開こうとしてエラーが出ているのですか?
> [やりたいこと]
> 社員から授受したファイル名の一覧を生成する。
> (指定されたフォルダ配下の全ファイルパスを取得し、自ブックのシートに
> ファイル名一覧を出力する)
と整合しませんが。

ともあれ、正確な事実説明をしていただけば、より多くのかたからコメントが
あるのではないでしょうか。
・ツリー全体表示

【79853】Re:中国語(簡体語)を含むファイル名の取得
質問  とらこ  - 18/4/29(日) 22:19 -

引用なし
パスワード
   ▼γ さん:
>VBE上でデバッグ出力した時のことを
>言っているんでしょうか。
>VBEはUnicode非対応ですね。

おっしゃる通りです。
エラーにより中断するので、VBEのウォッチ式で値を確認してました。
追記となり大変恐縮ですが、中断した箇所はファイル名の出力部分ではなく、
その後のファイルオープン処理でした。
やはり、ファイル名の変換処理などが必要なのでしょうか?

(ErrMsg:〜aa?bbcc.xlsxを開くことができません。ファイル形式またはファイル拡張子が
      正しくありません。〜)
・ツリー全体表示

【79852】Re:中国語(簡体語)を含むファイル名の取得
発言  γ  - 18/4/29(日) 16:46 -

引用なし
パスワード
   VBE上でデバッグ出力した時のことを
言っているんでしょうか。
VBEはUnicode非対応ですね。
・ツリー全体表示

【79851】Re:中国語(簡体語)を含むファイル名の取得
回答  Abyss  - 18/4/29(日) 15:15 -

引用なし
パスワード
   VBA内部はUnicode対応です。同時にExcelシートもUnicode対応。
従って、OS上で表示される文字列はそのままシートに出力可能です。
・ツリー全体表示

【79850】Re:Excel VBAによるpowerpointの操作につ...
発言  マナ  - 18/4/29(日) 14:54 -

引用なし
パスワード
   ▼ぼう さん:

お邪魔します。
ht tp://darumaexcel.uijin.com/info/pause.html
・ツリー全体表示

【79849】Re:Excel VBAによるpowerpointの操作につ...
質問  ぼう  - 18/4/29(日) 14:37 -

引用なし
パスワード
   おっしゃったことを全て試しましたがうまくいきませんでした…。
そこでWindowsでやってみたところうまくいきました。(普段はMacを使っています。)
この違いは何があるでしょうか。Macに使い慣れているということもありできればMacでやりたいので、教えていただけると幸いです。
・ツリー全体表示

【79848】Re:複数条件での最大日付取得
発言  マナ  - 18/4/29(日) 10:31 -

引用なし
パスワード
   ▼tsujio さん:

>さきほど【79840】でご教示いただいた方法をマクロに置き換え思ったとおりの結果を得ることができました。

こんな考え方でもよいかも。

Option Explicit

Sub test()
  Dim i As Long
  Dim 最終列 As Long
  
  For i = 2 To 4
    最終列 = Cells(i, Columns.Count).End(xlToLeft).Column
    If 最終列 >= 3 Then
      MsgBox Cells(1, 最終列).Value
    End If
  Next
    
End Sub
・ツリー全体表示

130 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free