Excel VBA質問箱 IV

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

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


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

【81988】Re:csvの読み込みエラーについて
発言  よろずや  - 22/2/27(日) 22:23 -

引用なし
パスワード
   ▼ちか さん:
>なるほど、それは全く頭の中にありませんでした!
>
>また質問で申し訳ないのですが、その並び替えのプログラムは
>このVBAに追加する形でしょうか?それとも新規で並べ替えのプログラムというかVBAを作ってという形でしょうか?


わけの分からんものは、触らぬ神に祟りなしっちゅぅことでいじらん方がよいかと。

CSV変換プログラムを新規作成がよろしいかと。
実行時にひと手間増えますが......

その前に、再確認。
列の並び順が変わっただけなのですか?
・ツリー全体表示

【81987】Re:csvの読み込みエラーについて
質問  ちか  - 22/2/27(日) 22:08 -

引用なし
パスワード
   ▼よろずや さん:
>▼ちか さん:
>>なるほど、では関連している項目データ処理を行っているところを書き直さないと、csvも開くことができない認識でよろしいでしょうか?
>>
>
>そうなります。
>
>諦めるという選択肢もあります。
>
>プログラムの変更をあきらめて、読み込むCSVファイルの並びを変更するプログラムを新規に作るのです。
>
>CSVファイルを読み込み、列を並べ替えてCSVファイルとして出力する。
>それだけです。


なるほど、それは全く頭の中にありませんでした!

また質問で申し訳ないのですが、その並び替えのプログラムは
このVBAに追加する形でしょうか?それとも新規で並べ替えのプログラムというかVBAを作ってという形でしょうか?
・ツリー全体表示

【81986】Re:csvの読み込みエラーについて
発言  よろずや  - 22/2/27(日) 21:53 -

引用なし
パスワード
   ▼ちか さん:
>なるほど、では関連している項目データ処理を行っているところを書き直さないと、csvも開くことができない認識でよろしいでしょうか?
>

そうなります。

諦めるという選択肢もあります。

プログラムの変更をあきらめて、読み込むCSVファイルの並びを変更するプログラムを新規に作るのです。

CSVファイルを読み込み、列を並べ替えてCSVファイルとして出力する。
それだけです。
・ツリー全体表示

【81985】Re:csvの読み込みエラーについて
質問  ちか  - 22/2/27(日) 21:18 -

引用なし
パスワード
   ▼よろずや さん:
>まだまだ棘の道は続きます。
>
>見出しを入れ替えたなら、どこが変更になったのかを書き出して置いて、
>実際のデータ処理のところを全部書き換える必要があります。
>
>最初のモジュールに戻って、何番目の項目が変更になったのか、それがどれと入れ替わったのかを探し当ててコードを書き換える必要があります。

なるほど、では関連している項目データ処理を行っているところを書き直さないと、csvも開くことができない認識でよろしいでしょうか?

セルの文字数とかの変更はどうにかなっても、関数の変更となると、もうお手上げになりそうですね・・・

正直いろいろいじっていても、結局開けないので、進んでるのか、後退してるのがわからなくて…汗
・ツリー全体表示

【81984】Re:csvの読み込みエラーについて
発言  よろずや  - 22/2/27(日) 20:19 -

引用なし
パスワード
   まだまだ棘の道は続きます。

見出しを入れ替えたなら、どこが変更になったのかを書き出して置いて、
実際のデータ処理のところを全部書き換える必要があります。

最初のモジュールに戻って、何番目の項目が変更になったのか、それがどれと入れ替わったのかを探し当ててコードを書き換える必要があります。
・ツリー全体表示

【81983】Re:csvの読み込みエラーについて
質問  ちか  - 22/2/27(日) 19:09 -

引用なし
パスワード
   ▼よろずや さん:
>▼ちか さん:
>>  '-------------------------------------------------------
>>  ' ヘッダーチェック処理
>>  '-------------------------------------------------------
>>  If strMode = CST_モード2 Then
>>    If (StrCsv(0) <> "企業コード") Or _
>>      (StrCsv(1) <> "支店コード") Or _
>>      (StrCsv(2) <> "店舗コード") Or _
>>      (StrCsv(3) <> "企業名") Or _
>>      (StrCsv(4) <> "支店名") Or _
>>      (StrCsv(5) <> "店舗名") Or _
>>      (StrCsv(6) <> "店舗郵便番号") Or _
>>      (StrCsv(7) <> "店舗住所") Or _
>>      (StrCsv(8) <> "店舗電話番号") Then
>>     
>>      strRtnMsg = "NG"
>>    Else
>>      strRtnMsg = "OK"
>>    End If
>>  ElseIf strMode = CST_モード1 Then
>>    If (StrCsv(0) <> "顧客管理番号1.") Or _
>>      (StrCsv(1) <> "氏名") Or _
>>      (StrCsv(2) <> "氏名(カナ)") Or _
>>      (StrCsv(3) <> "郵便番号") Or _
>>      (StrCsv(4) <> "都道府県") Or _
>>      (StrCsv(5) <> "市区町村") Or _
>>      (StrCsv(6) <> "市区町村以下") Or _
>>      (StrCsv(7) <> "携帯電話番号1") Then
>>     
>>      strRtnMsg = "NG"
>>    Else
>>      strRtnMsg = "OK"
>>    End If
>>  End If
>>
>>
>>ということのようなのですが・・・
>
>ここで項目の並びをチェックしています。
>それを新しい書式の順に並べ替える必要があります。
>これで、最初の関門は突破できます。
>
>まだまだ棘の道は続きますが...


なるほど・・・
実は並び替えはしてみたのですが、
まだcsvが開けなくて・・・

他にも何か原因があると思われますか?

チェックだけ済めば読み込めるのかな、と思っていたのですが・・・
・ツリー全体表示

【81982】Re:csvの読み込みエラーについて
回答  よろずや  - 22/2/27(日) 18:58 -

引用なし
パスワード
   ▼ちか さん:
>  '-------------------------------------------------------
>  ' ヘッダーチェック処理
>  '-------------------------------------------------------
>  If strMode = CST_モード2 Then
>    If (StrCsv(0) <> "企業コード") Or _
>      (StrCsv(1) <> "支店コード") Or _
>      (StrCsv(2) <> "店舗コード") Or _
>      (StrCsv(3) <> "企業名") Or _
>      (StrCsv(4) <> "支店名") Or _
>      (StrCsv(5) <> "店舗名") Or _
>      (StrCsv(6) <> "店舗郵便番号") Or _
>      (StrCsv(7) <> "店舗住所") Or _
>      (StrCsv(8) <> "店舗電話番号") Then
>     
>      strRtnMsg = "NG"
>    Else
>      strRtnMsg = "OK"
>    End If
>  ElseIf strMode = CST_モード1 Then
>    If (StrCsv(0) <> "顧客管理番号1.") Or _
>      (StrCsv(1) <> "氏名") Or _
>      (StrCsv(2) <> "氏名(カナ)") Or _
>      (StrCsv(3) <> "郵便番号") Or _
>      (StrCsv(4) <> "都道府県") Or _
>      (StrCsv(5) <> "市区町村") Or _
>      (StrCsv(6) <> "市区町村以下") Or _
>      (StrCsv(7) <> "携帯電話番号1") Then
>     
>      strRtnMsg = "NG"
>    Else
>      strRtnMsg = "OK"
>    End If
>  End If
>
>
>ということのようなのですが・・・

ここで項目の並びをチェックしています。
それを新しい書式の順に並べ替える必要があります。
これで、最初の関門は突破できます。

まだまだ棘の道は続きますが...
・ツリー全体表示

【81981】Re:csvの読み込みエラーについて
質問  ちか  - 22/2/27(日) 17:54 -

引用なし
パスワード
   ▼よろずや さん:
>そこじゃないです。
>
>その中で、「ChkCSVデータ」を呼び出してます。
>
>呼ばれた先の処理でチェックしてます。
>
>「Function ChkCSVデータ」で全部のモジュールを検索してください。

すみません、モジュール2にありました。


'&*************************************************************
'& CSVデータチェック処理
'&*************************************************************
Public Function ChkCSVデータ(ByVal strData As String, _
               ByVal strMode As String) As String

  Dim StrCsv() As String
  Dim strRtnMsg As String
  Dim i As Long

  strRtnMsg = ""
  '-------------------------------------------------------
  ' カンマ区切りで配列に格納
  '-------------------------------------------------------
  strData = Replace(strData, """", "")
  StrCsv = Split(strData, ",")
  '-------------------------------------------------------
  ' 配列数チェック
  '-------------------------------------------------------
  i = UBound(StrCsv)
  If i <= 7 Then
    strRtnMsg = "NG"
    ChkCSVデータ = strRtnMsg
    Exit Function
  End If
  '-------------------------------------------------------
  ' ヘッダーチェック処理
  '-------------------------------------------------------
  If strMode = CST_モード2 Then
    If (StrCsv(0) <> "企業コード") Or _
      (StrCsv(1) <> "支店コード") Or _
      (StrCsv(2) <> "店舗コード") Or _
      (StrCsv(3) <> "企業名") Or _
      (StrCsv(4) <> "支店名") Or _
      (StrCsv(5) <> "店舗名") Or _
      (StrCsv(6) <> "店舗郵便番号") Or _
      (StrCsv(7) <> "店舗住所") Or _
      (StrCsv(8) <> "店舗電話番号") Then
     
      strRtnMsg = "NG"
    Else
      strRtnMsg = "OK"
    End If
  ElseIf strMode = CST_モード1 Then
    If (StrCsv(0) <> "顧客管理番号1.") Or _
      (StrCsv(1) <> "氏名") Or _
      (StrCsv(2) <> "氏名(カナ)") Or _
      (StrCsv(3) <> "郵便番号") Or _
      (StrCsv(4) <> "都道府県") Or _
      (StrCsv(5) <> "市区町村") Or _
      (StrCsv(6) <> "市区町村以下") Or _
      (StrCsv(7) <> "携帯電話番号1") Then
     
      strRtnMsg = "NG"
    Else
      strRtnMsg = "OK"
    End If
  End If
  '-------------------------------------------------------
  ' 戻り値設定処理
  '-------------------------------------------------------
  ChkCSVデータ = strRtnMsg

End Function


ということのようなのですが・・・
・ツリー全体表示

【81980】Re:csvの読み込みエラーについて
発言  よろずや  - 22/2/27(日) 17:38 -

引用なし
パスワード
   そこじゃないです。

その中で、「ChkCSVデータ」を呼び出してます。

呼ばれた先の処理でチェックしてます。

「Function ChkCSVデータ」で全部のモジュールを検索してください。
・ツリー全体表示

【81979】Re:csvの読み込みエラーについて
質問  ちか  - 22/2/27(日) 15:03 -

引用なし
パスワード
   ▼よろずや さん:
>Function ChkCSVデータ(なんたらかんたら...
>と書いてあるところを探しましょう。

ありがとうございます。
探してみて多分これじゃないかなってとこがありました。
ただ残念ながら、これが何を書いてあるのかがわかりません。
この条件を満たすとかifなんじゃないかって思うのですが、ご教授いただければ幸いです。


'CSVファイル読込
  '===========================================================
  Do While Not EOF(1)
    '-------------------------------------------------------
    '1行読込処理
    '-------------------------------------------------------
    Line Input #ch, csvStr
    '-------------------------------------------------------
    'カンマ区切りで配列に格納
    '-------------------------------------------------------
    csvStr = Replace(csvStr, """", "")
    csvStr = Replace(csvStr, "'", "")
    '=======================================================
    'CSVファイルチェック
    '=======================================================
    If i = 1 Then
      If ChkCSVデータ(csvStr, strCsvMode) = "NG" Then
        Close #ch
        Application.DisplayAlerts = False
        Workbooks(strWkBookName).Close
        Application.DisplayAlerts = True
        MsgBox "選択したファイルはデータプールCSVではありません。", vbOKOnly + vbExclamation
        Exit Sub
      End If
    Else
      '-----------------------------------------------------------
      'シート コピー処理
      '-----------------------------------------------------------
      If intSheetIdxCount = 1 Then
        ThisWorkbook.Worksheets("2×6タイプ").Copy Before:=Worksheets("Sheet1")
        Workbooks(strWkBookName).Worksheets("2×6タイプ").Name = CStr(intSheetIdx)

      End If
      '=======================================================
      '書き込み処理
      '=======================================================
      Set2_6セルデータ strCsvMode, csvStr, strWkBookName, i, intSheetIdx, intSheetIdxCount
      '-------------------------------------------------------
      ' シートインデックス処理 125
      '-------------------------------------------------------
      If intSheetIdxCount >= 12 Then
        'シートカウント
        intSheetIdx = intSheetIdx + 1
        '行カウント
        intSheetIdxCount = 1
        'シート数125で終了(1,500行分)
        If intSheetIdx > 125 Then
          MsgBox "1,500行を超えました。以降は別途作成してください。", vbOKOnly + vbInformation
          Exit Do
        End If
      Else
        '行カウント
        intSheetIdxCount = intSheetIdxCount + 1
      End If

    End If
    '-------------------------------------------------------
    'インクリメント
    '-------------------------------------------------------
    i = i + 1
  Loop
  '-----------------------------------------------------------
  'ファイルクローズ
  '-----------------------------------------------------------
  Close #ch
  '-----------------------------------------------------------
  '終了メッセージ
  '-----------------------------------------------------------
  MsgBox "作成完了"

End Sub
・ツリー全体表示

【81978】Re:vbaのテキストボックスについて。
お礼  サンキョウ  - 22/2/27(日) 11:12 -

引用なし
パスワード
   ▼よろずや さん:

>Excel ではありませんが、Microsoft 製品で上記の様な仕様のものがあります。
>Excel も仕様なのでは。

そうなのですか。
情報ありがとう御座います。

2020年の8月まではきちんと表示されていた様な気がして・・・。

とりあえずは対応出来たので一安心ですが・・。

よろずやさん、ありがとう御座いました。
・ツリー全体表示

【81977】Re:vbaのテキストボックスについて。
発言  よろずや  - 22/2/27(日) 10:59 -

引用なし
パスワード
   ▼サンキョウ さん:
>テキストボックスの設定
>マルチライン/False
>スクロールバー/水平
>
>にしていると3000文字程度入力されているセルをテキストボックスに
>.valueしたところ1文字目から1000文字目までしか表示出来ない
>(スクロールバーが1000文字目までしか移動しない)状態になりました。
>
>とりあえず、マルチライン/True・スクロールバー/垂直にしたところ
>全文字数を表示出来るようにはなりました。

Excel ではありませんが、Microsoft 製品で上記の様な仕様のものがあります。
Excel も仕様なのでは。
・ツリー全体表示

【81976】Re:vbaのテキストボックスについて。
発言  サンキョウ  - 22/2/27(日) 10:12 -

引用なし
パスワード
   お世話になっております。
お読み頂いた方がいれば、有難う御座いました。

色々試してみました。

当方環境
win10
office2016
となります。

テキストボックスの設定
マルチライン/False
スクロールバー/水平

にしていると3000文字程度入力されているセルをテキストボックスに.valueしたところ1文字目から1000文字目までしか表示出来ない(スクロールバーが1000文字目までしか移動しない)状態になりました。

とりあえず、マルチライン/True・スクロールバー/垂直にしたところ全文字数を表示出来るようにはなりました。

不具合情報や、解決方法等をご存じの方がいらっしゃれば情報お願いいたします。
・ツリー全体表示

【81975】Re:csvの読み込みエラーについて
発言  よろずや  - 22/2/25(金) 13:25 -

引用なし
パスワード
   Function ChkCSVデータ(なんたらかんたら...
と書いてあるところを探しましょう。
・ツリー全体表示

【81974】csvの読み込みエラーについて
質問  ちか E-MAIL  - 22/2/24(木) 13:14 -

引用なし
パスワード
   こんにちは
お世話になります
csvでシールラベルを作るVBAがあったのですが、
csvの内容、セルの順番が変わってから起動しなくなってしまいました。
どうにか再度使えるようにしたいのですが、csvの読見込みができなくて。
セルの読み込み条件などってここのモジュールのほうじゃなく、シート1のほうのVBAでよろしいでしょうか?また、どういう変更を行えばいいなど、アドバイスありましたらお伺いしたいです。
お手数ではございますが、よろしくお願いします。

Public Sub Set2_6タイプデータ設定処理(ByVal strCsvMode As String)

  Dim vntFileName As Variant
  Dim intSheetIdx As Long
  Dim intSheetIdxCount As Long
  
  Dim csvFile As String
  Dim ch As Long
  Dim i As Long
  Dim csvStr As String
  Dim StrCsv() As String

  '===========================================================
  ' ファイルを選択ダイアログオープン処理
  '===========================================================
  vntFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv" _
                      , FilterIndex:=1 _
                      , Title:="データプールファイル" _
                      , MultiSelect:=False _
                       )
  '===========================================================
  ' 選択ファイルオープン処理
  '===========================================================
  If vntFileName = False Then
    Exit Sub
  End If
  '===========================================================
  ' 新規ブック作成処理
  '===========================================================
  Dim NewBook As Workbook
  Dim strWkBookName As String
  '-----------------------------------------------------------
  '新しいブック作成 名前取得処理
  '-----------------------------------------------------------
  Set NewBook = Workbooks.Add
  strWkBookName = NewBook.Name
  '===========================================================
  'CSVファイル名
  '===========================================================
  csvFile = vntFileName
  '===========================================================
  '空いている番号を取得
  '===========================================================
  ch = FreeFile
  '===========================================================
  ' CSVファイルオープン
  '===========================================================
  Open csvFile For Input As #ch
  '===========================================================
  'インデックスリセット
  '===========================================================
  i = 1
  intSheetIdx = 1
  intSheetIdxCount = 1
  '===========================================================
  'CSVファイル読込
  '===========================================================
  Do While Not EOF(1)
    '-------------------------------------------------------
    '1行読込処理
    '-------------------------------------------------------
    Line Input #ch, csvStr
    '-------------------------------------------------------
    'カンマ区切りで配列に格納
    '-------------------------------------------------------
    csvStr = Replace(csvStr, """", "")
    csvStr = Replace(csvStr, "'", "")
    '=======================================================
    'CSVファイルチェック
    '=======================================================
    If i = 1 Then
      If ChkCSVデータ(csvStr, strCsvMode) = "NG" Then
        Close #ch
        Application.DisplayAlerts = False
        Workbooks(strWkBookName).Close
        Application.DisplayAlerts = True
        MsgBox "選択したファイルはデータプールCSVではありません。", vbOKOnly + vbExclamation
        Exit Sub
      End If
    Else
      '-----------------------------------------------------------
      'シート コピー処理
      '-----------------------------------------------------------
      If intSheetIdxCount = 1 Then
        ThisWorkbook.Worksheets("2×6タイプ").Copy Before:=Worksheets("Sheet1")
        Workbooks(strWkBookName).Worksheets("2×6タイプ").Name = CStr(intSheetIdx)

      End If
      '=======================================================
      '書き込み処理
      '=======================================================
      Set2_6セルデータ strCsvMode, csvStr, strWkBookName, i, intSheetIdx, intSheetIdxCount
      '-------------------------------------------------------
      ' シートインデックス処理 125
      '-------------------------------------------------------
      If intSheetIdxCount >= 12 Then
        'シートカウント
        intSheetIdx = intSheetIdx + 1
        '行カウント
        intSheetIdxCount = 1
        'シート数125で終了(1,500行分)
        If intSheetIdx > 125 Then
          MsgBox "1,500行を超えました。以降は別途作成してください。", vbOKOnly + vbInformation
          Exit Do
        End If
      Else
        '行カウント
        intSheetIdxCount = intSheetIdxCount + 1
      End If

    End If
    '-------------------------------------------------------
    'インクリメント
    '-------------------------------------------------------
    i = i + 1
  Loop
  '-----------------------------------------------------------
  'ファイルクローズ
  '-----------------------------------------------------------
  Close #ch
  '-----------------------------------------------------------
  '終了メッセージ
  '-----------------------------------------------------------
  MsgBox "作成完了"

End Sub
・ツリー全体表示

【81973】vbaのテキストボックスについて。
質問  サンキョウ  - 22/2/24(木) 11:38 -

引用なし
パスワード
   userformにテキストボックスを配置してセルの内容(3000文字以上)を表示させているのですが、テキストボックスの水平スクロールバーが尺足らず?のような状態で最後まで(後半の文字が)表示されなくなりました。

私の環境の問題なのか?アップデート等の不具合なのか?
同様の状況の方はいらっしゃらないでしょうか?

検索してみましたが、同様の内容が見つかりませんでした。

ご教授願えないでしょうか。
・ツリー全体表示

【81972】Re:ユーザーフォームのコンボボックスに...
お礼  トム  - 22/2/24(木) 8:33 -

引用なし
パスワード
   ▼よろずや さん:
>>アンダーバーだとファイル名に使用してもエラーは出ませんでした。
>
>アンダーバー以外の記号はダメと思ってよし。

アンダーバーだけなんですね。
情報ありがとうございました。
・ツリー全体表示

【81971】Re:ユーザーフォームのコンボボックスに...
回答  よろずや  - 22/2/22(火) 21:56 -

引用なし
パスワード
   >アンダーバーだとファイル名に使用してもエラーは出ませんでした。

アンダーバー以外の記号はダメと思ってよし。
・ツリー全体表示

【81970】ユーザーフォームのコンボボックスについ...
質問  トム  - 22/2/21(月) 12:01 -

引用なし
パスワード
   こんにちは。

ユーザーフォームのコンボボックスのRowSourceプロパティにて、
ファイル名に使用してはいけない文字のルールをご存じの方がいらっしゃったら、
教えて下さい。

現状分かっているのは・・・
()
このかっこ記号がファイル名に使用すると、
実行時エラー 380
RowSourceプロパティを設定できません。プロパティの値が無効です。
とエラーが出ます。

_
アンダーバーだとファイル名に使用してもエラーは出ませんでした。
使用環境はWindows10 64bit のExcel2016になります。

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

【81969】Re:連続するした数値の判定
発言  マナ  - 22/2/16(水) 20:59 -

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

何がしたいかイメージできません。
理解できたら、↓で回答するかもしれません。
www.excel.studio-kazu.jp/kw/20220216103736.html
・ツリー全体表示

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