Excel VBA質問箱 IV

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

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


4668 / 13644 ツリー ←次へ | 前へ→

【55318】コ−ド表記を分類表記にするには かずお 08/4/27(日) 14:39 質問[未読]
【55320】コ−ド表記を分類表記にするには かずお 08/4/27(日) 17:11 質問[未読]
【55321】Re:コ−ド表記を分類表記にするには Hirofumi 08/4/27(日) 17:20 回答[未読]
【55328】コ−ド表記を分類表記にするには かずお 08/4/28(月) 14:58 お礼[未読]
【55322】Re:コ−ド表記を分類表記にするには かみちゃん 08/4/27(日) 17:21 発言[未読]
【55323】Re:コ−ド表記を分類表記にするには かみちゃん 08/4/27(日) 17:48 発言[未読]
【55329】コ−ド表記を分類表記にするには かずお 08/4/28(月) 15:07 お礼[未読]

【55318】コ−ド表記を分類表記にするには
質問  かずお  - 08/4/27(日) 14:39 -

引用なし
パスワード
   A列には枝番のコードがあります。C、D、E列は各々大、中、小分類となっています
。区切り文字−で分割すると0が表示されませんのでどの様にしたら良いか何方か教えて下さい。

コ−ド        大    中    小
35-03-11        35    3    11
11-28-01        11    28    1
  ・        ・    ・    ・
  ・        ・    ・    ・
  ・        ・    ・    ・

また、この逆もしたいのですが    

大    中    小        コ−ド
35    3    11        35-3-11
11    28    1        11-28-1
・    ・    ・          ・
・    ・    ・           ・
・    ・    ・          ・

宜しくお願い致します

【55320】コ−ド表記を分類表記にするには
質問  かずお  - 08/4/27(日) 17:11 -

引用なし
パスワード
   さらに以下のソースでは実行後にとんでもない範囲まで選択してしまうのですが?どおしてでしょうか?

Private Sub CommandButton2_Click()
 Dim strArr() As String
 Dim V As Variant
 Dim rg As Range
 '最終セル
 ActiveCell.SpecialCells(xlLastCell).Select
 endr = ActiveCell.Row
 For j = 2 To endr
 Set rg = Cells(j, 1)

 '−の位置で分けて、配列に格納する
 strArr = Split(rg.Value, "-")
 i = 1         
 For Each V In strArr
  rg.Offset(0, i) = V
  i = i + 1
 Next
  Cells(1, 3) = "大分類"
  Cells(1, 4) = "中分類"
  Cells(1, 5) = "小分類"
 Next
End Sub

です。何分素人のため失礼かと思いますが、前の問題も含め宜しくお願い致します。

【55321】Re:コ−ド表記を分類表記にするには
回答  Hirofumi  - 08/4/27(日) 17:20 -

引用なし
パスワード
   Option Explicit

Public Sub Sample1()

  '◆データベースのデータ列数(A列)
  Const clngColumns As Long = 1
  
  Dim i As Long
  Dim lngRows As Long
  Dim rngList As Range
  Dim rngResult As Range
  Dim vntData As Variant
  Dim strResult() As String
  Dim strProm As String

  '◆Listの先頭セル位置を基準とする(A列の列見出しのセル位置)
  Set rngList = ActiveSheet.Cells(1, "A")
  
  '◆出力先の先頭セル位置を基準とする(C列の列見出しのセル位置)
  Set rngResult = rngList.Parent.Cells(1, "C")
  
  With rngList
    '行数の取得
    lngRows = .Offset(Rows.Count - .Row).End(xlUp).Row - .Row
    If lngRows <= 0 Then
      strProm = "データが有りません"
      GoTo Wayout
    End If
    '列データを配列に取得
    vntData = .Offset(1).Resize(lngRows + 1).Value
  End With
  
  '画面更新を停止
  Application.ScreenUpdating = False
  
  With rngResult
    For i = 1 To lngRows
      strResult = Split(vntData(i, 1), "-", , vbBinaryCompare)
      .Offset(i).Resize(, UBound(strResult) + 1).Value = strResult
    Next i
  End With
  
  strProm = "処理が完了しました"
   
Wayout:

  '画面更新を再開
  Application.ScreenUpdating = True
  
  Set rngList = Nothing
  Set rngResult = Nothing
   
  MsgBox strProm, vbInformation
     
End Sub

Public Sub Sample2()

  '◆データベースのデータ列数(A列〜C列)
  Const clngColumns As Long = 3
  
  Dim i As Long
  Dim lngRows As Long
  Dim rngList As Range
  Dim rngResult As Range
  Dim vntData As Variant
  Dim strResult As String
  Dim strProm As String

  '◆Listの先頭セル位置を基準とする(A列の列見出しのセル位置)
  Set rngList = ActiveSheet.Cells(1, "A")
  
  '◆出力先の先頭セル位置を基準とする(C列の列見出しのセル位置)
  Set rngResult = rngList.Parent.Cells(1, "E")
  
  With rngList
    '行数の取得
    lngRows = .Offset(Rows.Count - .Row).End(xlUp).Row - .Row
    If lngRows <= 0 Then
      strProm = "データが有りません"
      GoTo Wayout
    End If
    '列データを配列に取得
    vntData = .Offset(1).Resize(lngRows, 3).Value
  End With
  
  '画面更新を停止
  Application.ScreenUpdating = False
  
  With rngResult
    For i = 1 To lngRows
'      strResult = vntData(i, 1) & "-" & vntData(i, 2) & "-" & vntData(i, 3)
      strResult = Format(vntData(i, 1), "00") _
            & "-" & Format(vntData(i, 2), "00") _
            & "-" & Format(vntData(i, 3), "00")
      .Offset(i).Value = strResult
    Next i
  End With
    
  strProm = "処理が完了しました"
   
Wayout:

  '画面更新を再開
  Application.ScreenUpdating = True
  
  Set rngList = Nothing
  Set rngResult = Nothing
   
  MsgBox strProm, vbInformation
     
End Sub

【55322】Re:コ−ド表記を分類表記にするには
発言  かみちゃん  - 08/4/27(日) 17:21 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>実行後にとんでもない範囲まで選択してしまう

とんでもない範囲という意味がわかりません。
xlLastCellを使っているからだと思いますが、何がしたいのでしょうか?

【55323】Re:コ−ド表記を分類表記にするには
発言  かみちゃん  - 08/4/27(日) 17:48 -

引用なし
パスワード
   こんにちは。かみちゃん です。

Hirofumiさんからコードだけ提示されていますが、

>A列には枝番のコードがあります。C、D、E列は各々大、中、小分類となっています
>。区切り文字−で分割すると0が表示されません

0を表示したいのですか?したくないのですか?
提示されたシートレイアウト゛したいことだと思ってコードを提示すると以下のような
感じでできると思います。

A列の値を"-"で区切って、大区分、中区分、小区分に分解して、F列に分解後を
"-"でつなげた文字列を作っています。
ポイントは、Split関数、Offsetプロパティ、& です。

Sub Sample()
 With Range("A1")
  .Offset(, 2).Resize(, 3).Value = Split(.Value, "-")
  '以下の1行で文字列から数値に変換している(0を表示させないようにしている)
  .Offset(, 2).Resize(, 3).Value = .Offset(, 2).Resize(, 3).Value
  .Offset(, 5) = .Offset(, 2).Value & "-" & .Offset(, 3).Value & "-" & .Offset(, 4)
 End With
End Sub

【55328】コ−ド表記を分類表記にするには
お礼  かずお  - 08/4/28(月) 14:58 -

引用なし
パスワード
   Hirofumiさん返信ありがとう御座います。

早速マクロの実行で試してみました。数字の先頭にはどおしても0を使いたく又、文字表示では具合が悪く途方に暮れていましたが、まるで暗く長〜いトンネルから一気に表に飛び出した様な「あっ!」と思うほどの快適さで感激です。じっと眺め「こういうものなんだ」と、感じ入り色々活用したく思っています。

貴重なソースコードをありがとう御座いました。

【55329】コ−ド表記を分類表記にするには
お礼  かずお  - 08/4/28(月) 15:07 -

引用なし
パスワード
   かみちゃんさん御無沙汰しています。

xlLastCellも見よう見まねで構文もわからずトライアルしている有様で・・・
およそ1年ほど前にもここでアドバイスしていただき、その節は大変お世話になりました。その後も余り進歩してなく再びお世話になりありがとう御座いました。

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