アプリ版:「スタンプのみでお礼する」機能のリリースについて

初めましてm(_ _)mエクセル初心者です。同じような質問と回答が多くあり、困り果てて皆様のお知恵を拝借することにしました。エクセル2000を使用しています。あるシステムからの出力がエクセルファイルとして出てきます。システム自体を改造することは不可能です。出力例としては、以下の形式です。
 title  type  A1  staf   Date        
 商品名1  D   ZE  山田  2007/04/20  2007/05/18   
 商品名2  E   ZR  鈴木  2007/05/20  2007/08/04
 商品名2 G   ZH  田中  2007/09/20  2007/10/30
例えば、typeのD:一般 E:特殊 G:汎用 を意味します。ZE、ZRとかも、それぞれに意味があります。
これらのエクセル出力を下記のように編集したいと考えています。 
 商品名  型式 部署  担当    日付        
 商品名1  一般 販売部 山田  2007/04/20  2007/05/18 
 商品名2  特殊 営業部 鈴木  2007/05/20  2007/08/04
 商品名2 汎用 広報部 田中  2007/09/20  2007/10/30

データも膨大ですし、各々に一括置換していくのは毎回毎回手間がかかります。ファイルは、H190420.xlsとかH190421.XLSなどの名称で毎日出力されてきます。
簡単な操作で置換する方法があればお知恵を貸して下さい。    

A 回答 (6件)

#4 です。



こんにちは。

>早速、チャレンジしましたが、いろいろエラーが出て上手くいきませんね。

おそらく、設定の仕方自体が分からないと思うのです。私のは、分かりやすく書いたつもりですが、やはり、いきなりだと、どこにポイントを置くか分からないのかもしれません。本人が、それをどうしても完成したいという気持ちがあって、初めて成立するものです。

#2さんの記録マクロになれることですね。記録マクロを一度もしたことがないと、通常のマクロの設定は分からないかもしれません。ただ、器用な人は、マクロは必要ないかもしれません。
    • good
    • 0
この回答へのお礼

ご助言ありがとうございます。
何回か試しているうちに、何となく理解してきました。
やってみると、次にこうしたらどうなるかと、結構おもしろくなってきました。最初は、皆様に回答して頂いたものを貼り付けてやっていましたが、エラーが出てどこがまずいのかなとちんぷんかんぷんでした。確かに#2さんの記録マクロは、自動的にマクロが出来ていて、初心者には助かります。

お礼日時:2007/04/22 21:16

#4 の文章の訂正



誤り
>'検索単語数と置換文字数が違っているとエラーが発生します。

両方とも単語数です。
'検索単語数と置換単語数が違っているとエラーが発生します。
    • good
    • 0

こんにちは。



こんな感じでいかがでしょうか? 標準モジュールならどこに登録してもよいのですが、これをツールボタンにするには、「個人用マクロブック」の標準モジュールが最適です。ただし、毎回、出だしの部分の位置が変わるようなら、オプションを付けなくてはいけません。

以下は、A1 が最初になるように設定されています。以下の要領で、検索文字と置換文字を書き入れてください。順番と数は必ず合っていなくてはなりません。

Excel2000 では、試験をしておりませんが、たぶん大丈夫だと思います。

'標準モジュール
'-------------------------------------------------------------------
'注意:
'コンマ(,)で区切ります。ただし、絶対にスペースは入れてはいけません。
'検索単語数と置換文字数が違っているとエラーが発生します。
'型式
Private Const TYPE_S As String = "D,E,G"
Private Const TYPE_R As String = "一般,特殊,汎用"
'部署
Private Const DEP_S As String = "ZE,ZR,ZH"
Private Const DEP_R As String = "販売部,営業部,広報部"
'タイトル行
Private Const mTITLE As String = "商品名,型式,部署,担当,日付"
'*左端上のデータの出だしの場所
Const FIRST As String = "A1"

Sub ReplaceChar()
Dim FirstCell As Range
Dim arTitle As Variant
Dim Sers1 As Variant
Dim Reps1 As Variant
Dim Sers2 As Variant
Dim Reps2 As Variant
Dim ret As Integer
Dim i As Long
Dim j As Long

arTitle = Split(mTITLE, ",")
Sers1 = Split(TYPE_S, ",")
Reps1 = Split(TYPE_R, ",")
Sers2 = Split(DEP_S, ",")
Reps2 = Split(DEP_R, ",")

 Set FirstCell = ActiveSheet.Range(FIRST)
 
 FirstCell.Resize(, UBound(arTitle) + 1) = arTitle

 Application.ScreenUpdating = False
 
 '空白の除去
 Do
 FirstCell.EntireColumn(3).Replace " ", " ", 2, , False '全角空白
 FirstCell.EntireColumn(2).Replace " ", "", 2, , False
 ret = WorksheetFunction.CountIf(FirstCell.EntireColumn(2), "* ")
 Loop While ret > 0
 
 For i = LBound(Sers1) To UBound(Sers1)
 FirstCell.EntireColumn(2).Replace What:=Sers1(i), _
    Replacement:=Reps1(i), _
    LookAt:=xlWhole, _
    SearchOrder:=xlByRows, _
    MatchCase:=False
 Next i

 '空白の除去
 Do
  FirstCell.EntireColumn(3).Replace " ", " ", 2, , False '全角空白
  FirstCell.EntireColumn(3).Replace " ", "", 2, , False
  ret = WorksheetFunction.CountIf(FirstCell.EntireColumn(3), "* ")
 Loop While ret > 0
 
 For j = LBound(Sers2) To UBound(Sers2)
 FirstCell.EntireColumn(3).Cells.Replace What:=Sers2(j), _
    Replacement:=Reps2(j), _
    LookAt:=xlWhole, _
    SearchOrder:=xlByColumns, _
    MatchCase:=False
 Next j
 Application.ScreenUpdating = True
 
 Set FirstCell = Nothing
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。
詳細に記載して頂き感謝しています。
早速、チャレンジしましたが、いろいろエラーが出て上手くいきませんね。初めてのマクロなので、大変勉強になります。

お礼日時:2007/04/22 12:45

かんたんなVBAを作ってしまうのも手ですよ。



1.[ツール]-[マクロ]-[新しいマクロの記録] マクロ名は適当に。「マクロの保存先」は個人用マクロブック。
2.適当なセルをクリックしマクロの記録終了ボタンを押して終了させる。

以上の作業で個人用マクロの記録準備ができていますので、編集画面を下記の方法で開きます。

[ALT]+[F11]
 VisualBasicEditorが開きます。
画面に「プロジェクト」というウィンドウがなければ[CTRL]+[R]で出します。
その中に「VBAProject(PERSONAL.XLS)」という項目があるのでダブルクリック。
さらに、その中から「標準モジュール」をダブルクリック。
で、さらに、「Module1」をダブルクリック。

すると
--------------------------------------------------------------------
Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2007/4/21 ユーザー名 :おなまえ
'

'
Range("F16").Select
End Sub
--------------------------------------------------------------------
といった内容の画面が出てきますので、上下を残して消します。

--------------------------------------------------------------------
Sub Macro1()

End Sub
--------------------------------------------------------------------
消した部分の内容を変更します。

--------------------------------------------------------------------
Sub Macro1()

While Selection.Value <> ""

If Selection.Value = "D" Then
Selection.Value = "一般"
ElseIf Selection.Value = "E" Then
Selection.Value = "特殊"
ElseIf Selection.Value = "G" Then
Selection.Value = "汎用"
End If

Selection.Offset(0, 1).Select

If Selection.Value = "ZE" Then
Selection.Value = "販売部"
ElseIf Selection.Value = "ZR" Then
Selection.Value = "営業部"
ElseIf Selection.Value = "ZH" Then
Selection.Value = "広報部"
End If

Selection.Offset(1, -1).Select

Wend

End Sub
--------------------------------------------------------------------
簡単に説明すると、

   While Selection.Value <> ""
セルポインタのあるセルの内容が「からっぽ」でないときは
   Wend
までの内容を繰り返し行いなさいよ。

   If Selection.Value = "D" Then
    Selection.Value = "一般"
セルポインタのあるセルの内容が「D」だったら、その選択しているセルの内容を「一般」にしてちょうだいな。
以下同じようなことの繰り返し・・・

   Selection.Offset(0, 1).Select
セルポインタを右に1こ移動

   If Selection.Value = "ZE" Then
    Selection.Value = "販売部"
セルポインタのあるセルの内容が「ZE」だったら、その選択しているセルの内容を「文字列1」にしてちょうだいな。
以下同じようなことの繰り返し・・・

   Selection.Offset(1, -1).Select
セルポインタを下に1こ、左に1こ移動

てな感じです。

最初は形式の一番上の記号にセルポインタを合わせておいてください。

おそらくここに出てきている以上に記号が多いと思いますので、その場合はElseIf~の行を追加してください。
また上記では形式の隣に部署があるということを想定してセルポインタの移動をしていますが、位置が違うときはそれに合うように数字を書き換えてください。

マクロを使用する時は[ツール]-[マクロ]-[マクロ]から実行します。
    • good
    • 0
この回答へのお礼

ありがとうございました。
詳細に記載して頂き感謝しています。
早速、チャレンジしました。
マクロは初めて使うので、いろいろエラーが出て上手くいきませんが、試行錯誤でやっています。

お礼日時:2007/04/22 12:44

「ツール」-「マクロ」-「新しいマクロの記録」で、マクロ名は適当に付与して下さい。

その際に「マクロの保存先」は個人用マクロブックとして下さい。

1.Ctrl+hを押して、置換のダイアログを表示させます。
2.検索する文字列に「D」、置換後の文字列に「一般」と入力し、全て置換ボタンをクリックします。
3.その後、ZEは販売部、Eは特殊というように全ての置換操作を繰り返して下さい。
4.全ての置換操作が終了したら、マクロの記録終了ボタンをクリックします。

これで、置換マクロができあがります。エクセルを閉じるときに「個人用マクロブックを保存するか」と聞いて来ますので、保存して下さい。
未置換のH1904XX.XLSを開いて、「ツール」-「マクロ」-「マクロ」で先ほど作成した置換マクロを実行すれば出来上がりです。
    • good
    • 0
この回答へのお礼

ありがとうございました。
マクロは苦手意識が強いのでほとんど使いませんでした。
マクロの勉強ができ、非常に参考になりました。
これを機会に、使っていきたいと思います。

お礼日時:2007/04/22 12:40

typeの列がB列とします。

C列を「挿入」で空けます。
そのC列(C2)に、
=IF(B2="D","一般",IF(B2="E","特殊","汎用"))
としてみてください。後はオートフィルで必要な行までコピーします。D,E,GのB列は「表示しない」にしておけばよいでしょう。
「vlookup」を使う方法もありますが、割愛します。
ZE、ZRとかも同様に「if文」で処理できるでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございました。
IF文という手がありましたか。
関数はあまり使用しないのですが、簡単そうで便利だと思います。

お礼日時:2007/04/22 12:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!