Excel VBA質問箱 IV

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

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


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

【78428】Re:日付時刻の入力判定
質問  rao  - 16/9/18(日) 22:37 -

引用なし
パスワード
   お返事ありがとうございます。

(1) 空白なしは、isnumericで回避できそうですね。
ありがとうございます。
(2)打ち込みミスなので自動変換されてokだされても困るのです。
自動変換させずに判定する方法はないでしょうか?
(3)他人から貰ったファイルで、
元は昔のエクセルで作ったのだとおもいます。
気を利かせる機能がうまく働かなかったようです。
新しいバージョンで一度全てクリアすると、
気を利かせてくれました。

宜しくお願いします。
・ツリー全体表示

【78427】Re:日付時刻の入力判定
発言  γ  - 16/9/18(日) 21:55 -

引用なし
パスワード
   (1)
2016/9/1816:17:00  はIsNumericでFalseが返るし、
(2)
yyyy/mm/ss半角空白hh:mm:ssの書式のセルに
2016/9/18 35:17:00 を入力すると、は、
2016/9/19 11:17:00と自動変換されます。
(3)
全角を入れても気を利かせて半角になりませんか?

何をどのタイミングでチェックするのか。
そのあたりの内容をよく整理してください。
・ツリー全体表示

【78426】Re:日付時刻の入力判定
質問  rao  - 16/9/18(日) 16:35 -

引用なし
パスワード
   返信ありがとうございます。
説明不足ですいません。

打ち込み入力された年月日時分秒が
半角でyyyy/mm/ss半角空白hh:mm:ssの書式であり、
かつ日付時刻を示す数字であるか、判定したいのです。

たとえば
2016/9/1816:17:00  半角空白なし  や
2016/9/18 35:17:00 35時という時刻はない は
エラーにしたいのです。

isnumericですと、全角でもokになってしまいます。
まず全角を強制的に半角化し、strconv(cell(i.j),vbnarrow)
半角空白を探して、
空白前でisdate、空白後でistimeで
それぞれ判定するしかないのかなと思ったのですが。

もう少し賢い方法はないものかと思い、質問しました。
宜しくお願いします。
・ツリー全体表示

【78425】Re:範囲内のセルを左詰め移動するマクロ
お礼  ひでとし E-MAIL  - 16/9/18(日) 16:06 -

引用なし
パスワード
   ヤフー知恵袋の方に貼り付けさせてもらいました。
ありがとうございます。
・ツリー全体表示

【78424】Re:日付時刻の入力判定
発言  γ  - 16/9/18(日) 14:52 -

引用なし
パスワード
   もう少し説明してください。

正しい入力とは何ですか?
・特定の範囲が定まっているのですか?
・それとも、文字が入っていない実数ならOKということですか?
後者ならIsNumeric関数で判断すればよいでしょう。
・ツリー全体表示

【78423】Re:範囲内のセルを左詰め移動するマクロ
発言  β  - 16/9/18(日) 13:59 -

引用なし
パスワード
   ▼ひでとし さん:

知恵袋のほうは、どこそこで回答があって解決した。
ちなみに回答コードは、こうだったということで、ひでとしさんがクローズしてください。

私がアップしたコードを貼り付けてもらってもかまいません。
・ツリー全体表示

【78422】日付時刻の入力判定
質問  rao  - 16/9/18(日) 12:21 -

引用なし
パスワード
   初めて質問します。

日付と時刻を入力する目的で、yyyy/mm/dd hh:mm:ss
の書式で設定されているセルがあります。
正しく入力されているかどうかvbaで判定したいのですが、
いい判定方法はありますか?
isdate、istimeを使うといいと思うのですが。

宜しくお願いします。
・ツリー全体表示

【78421】Re:範囲内のセルを左詰め移動するマクロ
お礼  ひでとし E-MAIL  - 16/9/18(日) 12:12 -

引用なし
パスワード
   さらに素晴らしいマクロです。有り難うございました。
実は、ヤフー知恵袋にも質問しました。まだ回答は付いていませんが、もし時間があればヤフーでも回答してもらえませんか。ヤフーを見ている人にも共有してほしいです。もし無理ならば、ヤフーでの質問は取り下げようと思います。
毎回手作業で1時間掛かるところを1秒で処理してくれます。大変助かりました。
・ツリー全体表示

【78420】Re:範囲内のセルを左詰め移動するマクロ
発言  β  - 16/9/18(日) 11:44 -

引用なし
パスワード
   ▼ひでとし さん:

作業シートを使わない、まともな処理(?)案。

Sub Sample2()
  Dim r As Range
  Dim ad As String
  Dim w As Variant
  Dim n As Long
  
  n = Selection.Columns.Count
  
  For Each r In Selection.Rows
    If WorksheetFunction.CountA(r) > 0 Then
      ad = r.Address
      w = Filter(Evaluate("IF(" & ad & "="""",CHAR(2)," & ad & ")"), Chr(2), False)
      ReDim Preserve w(0 To n - 1)
      r.Value = w
    End If
  Next
  
End Sub
・ツリー全体表示

【78418】Re:範囲内のセルを左詰め移動するマクロ
発言  β  - 16/9/18(日) 10:54 -

引用なし
パスワード
   ▼ひでとし さん:

インチキ(?)で、作業シート "work" を使います。
なお、削除そのものはループなしでOKです。
また、選択領域に空白セルがなかった場合のエラー回避をしています。

(作業シートなしで処理するなら、配列に取り込み、配列内でループ処理をして書き戻すということもできます)


Sub Sample()
  
  With Sheets("work")
    .Cells.Clear
    Selection.Copy .Range("A1")
    On Error Resume Next
    .Range("A1", .UsedRange).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlToLeft
    On Error GoTo 0
    .Range("A1", .UsedRange).Copy Selection
  End With

End Sub
・ツリー全体表示

【78417】Re:範囲内のセルを左詰め移動するマクロ
発言  ひでとし E-MAIL  - 16/9/18(日) 10:15 -

引用なし
パスワード
   今度は列のアルファベットがいつの間にか全角になっておりまたずれている。
もーいや!
・ツリー全体表示

【78416】Re:範囲内のセルを左詰め移動するマクロ
発言  ひでとし E-MAIL  - 16/9/18(日) 10:11 -

引用なし
パスワード
   質問をアップしたら列表示がずれていたのでもう一度アップします。
申し訳ありません。
処理前のデータ
0ABCDEFGHIJKLMN
1*** * * * ** *
2 * ** ** * *
3* * * ** * **
4 **  **  **

処理後のデータ
0ABCDEFGHIJKLMN
1*** * * * ** *
2 *****  * *
3* ****  * **
4 **  **  **
・ツリー全体表示

【78415】範囲内のセルを左詰め移動するマクロ
質問  ひでとし E-MAIL  - 16/9/18(日) 10:07 -

引用なし
パスワード
   初心者で他のHPも調べてみたのですが、わからないので教えて下さい。

処理前のデータ
ABCDEFGHIJKLMN
1*** * * * ** *
2 * ** ** * *
3* * * ** * **
4 **  **  **

処理後のデータ
ABCDEFGHIJKLMN
1*** * * * ** *
2 *****  * *
3* ****  * **
4 **  **  **

処理したいのは次の通りです。
マウスで任意の範囲を選びます。上の例ではD2:J3。その範囲内の空白セルを詰めて左詰めしたいのです。

Sub test()
Dim r As Range
For Each r In Selection.Cells
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete shift:=xlToLeft
Next r
End Sub

を作ってみたのですが、左寄せ削除のため指定範囲外の行全体が左に動きます。範囲内のみを左詰めするマクロを教えて下さい。よろしくお願いします。
・ツリー全体表示

【78414】Re:エクセルからの削除、リネーム後の保存
回答  Todd  - 16/9/14(水) 5:53 -

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

ご対応有難う御座います。
一度、試してみます!

不明な点があれば、再度ご質問させて下さい。

以上
・ツリー全体表示

【78413】Re:ダブルクォーテーション置換
発言  β  - 16/9/13(火) 21:54 -

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

いま、コードをちらっと眺めましたら、変換後の クォーテーションは全角にしたかったようですね。

では、私がアップしたコードの中の

   Range("A1").Value = Replace(s, """", "''")
   Range("A2").Value = "'" & Replace(s, """", "''")

これは

   Range("A1").Value = Replace(s, """", "’’")
   Range("A2").Value = "'" & Replace(s, """", "’’")

ですね。
・ツリー全体表示

【78412】Re:ダブルクォーテーション置換
発言  β  - 16/9/13(火) 21:50 -

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

アップされたコード、まだ目を通していません。
明日以降、時間が取れたら眺めてみますけど、それとは別に

β - 16/9/13(火) 11:34 -

でコメントしたテスト、やっていただけましたか?
で、その結果は、納得ができるものではなかったということですか?
・ツリー全体表示

【78411】Re:ダブルクォーテーション置換
発言  はてなな  - 16/9/13(火) 13:38 -

引用なし
パスワード
   ダブルクォーテーションをシングルクォーテーションに変更したい

変換前は半角ダブルで
返還後は全角シングルへ
Sub 置換()
 Dim mystr(1, 32) As String
 
   mystr(0, 0) = "MI"
   mystr(1, 0) = "M I"
  
   mystr(0, 1) = "NI"
   mystr(1, 1) = "N I"
  
   mystr(0, 2) = "GA"
   mystr(1, 2) = "G A"
  
   mystr(0, 3) = "SI"
   mystr(1, 3) = "S I"
  
   mystr(0, 4) = "RI"
   mystr(1, 4) = "R I"
  
   mystr(0, 5) = ":〜"
   mystr(1, 5) = ":   〜"
  
   mystr(0, 6) = "OW"
   mystr(1, 6) = "O W"
  
   mystr(0, 7) = "7WV"
   mystr(1, 7) = "7 WV"
  
   mystr(0, 8) = "1WV"
   mystr(1, 8) = "1 WV"
  
   mystr(0, 9) = ".."
   mystr(1, 9) = "."
  
   mystr(0, 10) = "H."
   mystr(1, 10) = "H ."
  
   mystr(0, 11) = "N."
   mystr(1, 11) = "N ."
  
   mystr(0, 12) = "M."
   mystr(1, 12) = "M ."
  
   mystr(0, 13) = "G."
   mystr(1, 13) = "G ."
  
   mystr(0, 14) = "'"
   mystr(1, 14) = "’"
  
   mystr(0, 15) = "HW"
   mystr(1, 15) = "H W"
  
   mystr(0, 16) = "TK."
   mystr(1, 16) = "TK ."
  
   mystr(0, 17) = "L."
   mystr(1, 17) = "L ."
  
   mystr(0, 18) = "UD"
   mystr(1, 18) = "U D"
  
   mystr(0, 19) = "UM"
   mystr(1, 19) = "U M"
  
   mystr(0, 20) = "MA"
   mystr(1, 20) = "M A"
  
   mystr(0, 21) = "ND"
   mystr(1, 21) = "N D"
  
   mystr(0, 22) = "HA"
   mystr(1, 22) = "H A"
  
   mystr(0, 23) = "AM"
   mystr(1, 23) = "A M"
  
   mystr(0, 24) = "RA"
   mystr(1, 24) = "R A"
  
   mystr(0, 25) = "G/"
   mystr(1, 25) = "G /"
  
   mystr(0, 26) = "M/"
   mystr(1, 26) = "M /"
  
   mystr(0, 27) = "HU"
   mystr(1, 27) = "H U"
  
   mystr(0, 28) = "(P"
   mystr(1, 28) = "( P"
  
   mystr(0, 29) = "E ."
   mystr(1, 29) = "E."
  
   mystr(0, 30) = "SC"
   mystr(1, 30) = "S C"
  
   mystr(0, 31) = "CLR ."
   mystr(1, 31) = "CLR."


   mystr(0, 32) = """"
   mystr(1, 32) = "’’"
  
  
 Call 配列置換(mystr)
 
End Sub
=====================================
Sub 配列置換(ByRef mystr() As String) '配列置換
Dim i As Long
Dim jj
  
  ' On Error GoTo logout
  Application.ScreenUpdating = False
  
  With chhani
    'Debug.Print "置換" & ActiveWorkbook.name, ActiveSheet.name
    
    For i = 0 To UBound(mystr, 2)
      .NumberFormatLocal = "@"
      .Cells = Application.Substitute(.Cells, mystr(0, i), mystr(1, i))
    Next i
  End With
  
  For Each jj In chhani
     jj.Value = RTrim$(jj.Value)
     jj.Value = LTrim$(jj.Value)
  Next jj
 

End Sub


いろんなコードとくっついているので、これくらいで。
 Set chhani = .UsedRange
chhaniはシート全面にかかると思って下さい。


****ここの部分がうまく反映されないです。セルの先頭に来るときに。

   mystr(0, 32) = """"
   mystr(1, 32) = "’’"


わかりにくくてすみません。
・ツリー全体表示

【78410】Re:ダブルクォーテーション置換
発言  β  - 16/9/13(火) 11:34 -

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

>以下のケースだと
>そのセル.Value= "'" & 変換文字列
>
>今までと変わりません。
>
>"'" & "’ '"としても

まず、セットしているコードをそのまま正確にアップしてもらえませんか?

私が誤解したんでしょうかね、「"A" & "B" 」という文字列のことだと思っていたんですが?

それと変換前の " は 半角記号ですね。
変換後の ' も 半角記号ですね。

変換しても、見た目は変わりませんけど、変換したいんですよね?

Sub Test()
  Dim s As String
  
  s = """A"" & ""B"""
  
  MsgBox "今から " & s & " を変換して A1 と A2 に書きこみます"
  
  Range("A1").Value = Replace(s, """", "''")
  Range("A2").Value = "'" & Replace(s, """", "''")
  
End Sub


もし、私の勘違いでなければ
・ツリー全体表示

【78409】Re:ダブルクォーテーション置換
発言  はてなな  - 16/9/13(火) 11:23 -

引用なし
パスワード
   お返事ありがとうございます。

セルに入力する文字列の先頭の ' (シングルクォーテーション) は、文字列なんだよと
エクセルに強制的に認識させる制御文字になります。


は理解しております。


文字として
"A" & "B"を
' 'A' ' & ' ' B' ' に変更したいです。


以下のケースだと
そのセル.Value= "'" & 変換文字列

今までと変わりません。

"'" & "’ '"としても
・ツリー全体表示

【78408】Re:ダブルクォーテーション置換
発言  β  - 16/9/13(火) 10:42 -

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

セルに入力する文字列の先頭の ' (シングルクォーテーション) は、文字列なんだよと
エクセルに強制的に認識させる制御文字になります。

たとえば セルに 'ABC と 4桁打ち込んで =LEN(そのセル) とやると、4 ではなく 3 になりますね。

なので、

そのセル.Value= "'" & 変換文字列

こうしたらいかがでしょうか。
・ツリー全体表示

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