制御文を使って簡単にするには?

解決


サナ  2003-09-04 19:52:33  No: 108486

簡単な処理方法がわかりません。ご指導かださいませんか?

Public Sub Enter()
    Dim col As Long
    Dim row As Long
    Dim SN  As Long
    
    col = ActiveCell.Column
    row = ActiveCell.row
If (col = 1) Then
        If (row > 2) Then
            SN = CLng(Right(Cells(row - 1, col).Value, 3)) + 1
             Cells(row, col).Value = "EP481200DD" & "  25013/" & Format(CStr(SN), "000")
         End If
            Cells(row, col + 1).Select
        
ElseIf (col = 2) Then
        If (row > 2) Then
            SN = CLng(Right(Cells(row - 1, col).Value, 3)) + 1
             Cells(row, col).Value = "EP443800EE" & "  25013/" & Format(CStr(SN), "000")
         End If
            Cells(row, col + 1).Select
ElseIf (col = 3) Then
        If (row > 2) Then
            SN = CLng(Right(Cells(row - 1, col).Value, 3)) + 1
             Cells(row, col).Value = "EP443901FG" & "  25013/" & Format(CStr(SN), "000")
         End If
           Cells(row + 1, 1).Select
     ElseIf (col = 3) Then
        Cells(row, row).Select
    End If
End Sub
どうしたらいいでしょう?


ry  2003-09-04 20:31:48  No: 108487

Select Case Col
Case 1
    略
Case 2
    略
Case 3
    略
Case Else
    略
End Select

こんな感じでしょうか


ry  2003-09-04 20:34:52  No: 108488

ごめんなさい。
質問の意味を取り違えてました・・・
考えてみます。


ry  2003-09-04 20:47:07  No: 108489

なんかこのままでは文法エラーの気がします。
それに気がついた時点で思考停止いたしました(私の頭が)ので、
こんなんしか思いつきませんでした。

下記の所を関数にしてみる。

======== ここから
    SN = CLng(Right(Cells(row - 1, col).Value, 3)) + 1
    Cells(row, col).Value = "何かの文字列" & "  25013/" & Format(CStr(SN), "000")
======== ここまで


サナ  2003-09-04 21:17:53  No: 108490

返信ありがとうございます。
ryさんの言う通りなんですよ。
そこMid関数を使って文字列を何個目まで指定すればいいんですが、その仕方をVBAのヘルプを見ても参考になりませんでした…


nanashi  2003-09-04 23:27:26  No: 108491

この処理で何をやりたいのか分かりません。
回答できるかは分かりませんけど、出来れば説明を加えて下さい。
ソースだけ書かれても読む気しないし……。

>そこMid関数を使って文字列を何個目まで指定すればいいんですが、その仕方をVBAのヘルプを見ても参考になりませんでした…

これもよく意味が分かりませんね(^^;

ところで一番下のElseIf文は絶対通らないと思いますけど、良いんですか?

     ElseIf (col = 3) Then
        Cells(row, row).Select
    End If


サナ  2003-09-05 00:13:00  No: 108492

nanasiさん、レスありがとうございます。確かに上のモジュールじゃ意味がわかりにくいですね。すいません。

A1からO1(横1列)に日付やら出荷日、仕様、型番などを明記しています。
A2からO2にはそれらに対する日時や番号などを明記しています。
Enterを押すことでカーソルが横に、ドンドン上の値の+1や日付を出します。

問題①:ここで日付が変わったり、EP4812DDがEP4812DEになった時に上の値を参照してくれません(”E
P4812DD”としているから)。
問題②文章も長いのでMid関数などを使って文章をまとめたい。

今はこんなことに挑戦しています。


クリリン  2003-09-05 00:33:18  No: 108493

>問題②文章も長いのでMid関数などを使って文章をまとめたい。
見た所、文章が長いとは感じませんが…
だいだい、どうゆう意味合いで文章が長いと判断するんでしょうか?
処理すべき内容が解らない事には短くしようが無いのですが…
Mid関数を使うにしても、どのような文字列処理をしたいのか解らないとアドバイスしづらいです。

厳しいようですが、これ見て!、どう思う?、こうしたい!
だけでは解答率も下がりますよ。

できれば、開発環境、全体的な内容、何処で悩んでいるのか、結果的にどうしたいのか?等できる限りの情報を提供して頂かないと…
私たちはサナさんのソース全部を見ている訳ではないですし…


サナ  2003-09-05 00:48:20  No: 108494

ですよね。
これをセンス溢れる文章を作りたいのですが…
初心者なので早くマスターしたいと焦ってました。
とにかくまとまったかたちにしたいです。


クリリン  2003-09-05 01:01:57  No: 108495

どのようにまとめたいのかを明確にして頂くと、答えようが有るのですが…
例えば、
Cells(row, col).Value = "EP481200DD" & "  25013/" & Format(CStr(SN), "000")
の"EP481200DD"はパターンがあって、セルの位置によって内容をこう表現したいとか…表現の仕方によってはあえて関数にする必要が無い時もありますし。


クリリン  2003-09-05 01:08:01  No: 108496

ぱっと見た感じ、
SN = CLng(Right(Cells(row - 1, col).Value, 3)) + 1
はどの条件でも使われていますから、
row = ActiveCell.row
の下にでも置いたほうが良いですね。それだけで、2行減ります。

パターンさえ解れば、
row = ActiveCell.row
以下の行を関数化できますけどね・・・


サナ  2003-09-05 01:12:46  No: 108497

Cells(row, col).Value = "EP481200DD" & "  25013/" & Format(CStr(SN), "000")
の"EP481200DD"はパターンがたくさんあって、
EP44450DC"やEP473500EE"もあります。
初めの10桁はセル内に残し(代入)みたいな形にしておき折り返しの全体表示をして、25013/OOOみたいにします。(セル番地1個内のみ)
ここで型番と言う事にして、この型番も"EP44450DC"変わることもあるので、その変わった時の値を参照して変わった値を、次のセルに代入したいのです。


クリリン  2003-09-05 01:19:39  No: 108498

うーーん、そのパターンを説明して欲しいなぁ…
たとえば、適当なのか、順番があるとか…
結局のところ、型番はどうやって定義しているのですか?


サナ  2003-09-05 01:48:39  No: 108499

クリリンさんありごとうです。
型番はもともと決まっています。
でも、手違いがあればごくたまに変わる時があります。
          型番                        型番  
EP433501AA  25013/001      EP409000EE  25013/002
EP433501AA  25013/002      EP409000EE  25013/003  
          ・                            ・
          ・                            ・
          ・                            ・  
EP433501AA  25013/100      EP409000EE  25013/101

こんなのがいっぱい横に並んでいます。ここで手違いがあり  

EP433501AB  25013/001      EP409000EE  25013/002
EP433501AB  25013/002      EP409000EE  25013/003  
          ・                            ・
          ・                            ・
          ・                            ・  
EP433501AB  25013/100      EP409000EE  25013/101
このようになったりします。
この場合を想定したプログラムが要求されます。
そんなときのためにどうしたいいかを試行錯誤していま。


クリリン  2003-09-05 01:58:52  No: 108500

ごめん、ハッキリ言って、何が言いたいのかが解らないっす
_(._.)_
なんの手違いなの?
見たところ、「EP433501AA」が「EP433501AB」になってるとしか見受けられないのですが…
それに、「EP433501AA」や「EP409000EE」等、何処からの情報ですか?
ファイルですか?データベースですか?
全体的な説明無しに言われても漠然としすぎて…
仕様書とか無いの?
こちらが質問しないと駄目なの?

力になってあげたいけど、これでは無理っす!


クリリン  2003-09-05 02:03:54  No: 108501

>問題①:ここで日付が変わったり、EP4812DDがEP4812DEになった時に上の値を参照してくれません(”EP4812DD”としているから)。
もしかして、セルの中身を取得したいの?
セルでも何のセル?エクセル?グリッド?データベース?
それぞれ取得方法が違うので、環境をして欲しいっす!


サナ  2003-09-05 02:30:17  No: 108502

すいません。口で言うのは簡単なのですが、いざ掲示板にかけと言うには難しいです。
まことにご迷惑をおかけしました。
少し考えてみます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加