[[20061215004713]] 『データを単票形式で入力したい』(ET) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『データを単票形式で入力したい』(ET)
 初めて利用させていただきます。不備があればご容赦ください。
 1行に1件のデータを約30項目位入力しています。
 件数は約500件位になります。これが1年分のデータで保存しているのですが、
 画面分割して入力していますが、横スクロールがめんどくさく、
 1行分のデータを別画面の単票形式で入力する方法があれば大変便利なのですが、
 これってExcelで可能な事なのでしょうか?
 もし可能であれば方法を教えていただけないでしょうか?
 データは、文字・数字・記号など様々です。
 住所録に様々な情報が加わったものと考えていただければ結構です。
 一人分のデータを1行に入力してしまいたいのです。理由は、このデータを元に
 様々な帳票に転記できるようにしているからです。
 毎年この時期になると来年こそは便利に入力できるように試みようと考えつつ
 仕事に追われ、結局何等変更することなく使い続けてきました。
 来年こそはどうにかしようとExcelを勉強しようとこのページにたどり着きました。
 ちなみに私はExcelにあまり明るくありません。
 基本的な関数が使えるくらいです。どうぞ宜しくお願いします。
 忘れていました。エクセルのバージョンは2003です。

 その入力されているシートの最終行を取得して、1行下に記入(転記)するのであれば、
 マクロで組むのが最適なのではないでしょうか。
 ただ、そのためにはもう少し具体的なシート構成の説明が必要になってきます。
 どのようなシートで、何処に入力したものを反映させるのか。
 その辺を記入していただいた方が、レスが付きやすいかもしれませんね^^
 
 単純に、こんな表だとして、、、
 
	[A]	[B]	[C]	・・・	[AC]	[AD]
[1]						
[2]	項目	項目	項目	・・・	項目	項目
[3]	あ	い	う		ぞ	た
[4]
 
 A1〜AD1 の、30項目の入力が終わった瞬間に、A4〜AD4 に、データを記入するのであれば、、、
 
 シートモジュールへ
'------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If Intersect(.Cells, Range("A1:AD1")) Is Nothing Then Exit Sub
        If .Count > 1 Then Exit Sub
        If Application.CountA(Rows("1:1")) <> 30 Then Exit Sub
    End With
    With Range("A1:AD1")
        Application.EnableEvents = False
        Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 1).Resize(1, 30) = .Value
        .ClearContents
        Application.EnableEvents = True
    End With
End Sub
 
※シートモジュールとは、
 \Sheet1/
   ↑ここを右クリック → コードの表示
    出てきた白い画面に上記コードをコピペ。
    その後「×」でエクセルに戻る。 
 (キリキ)(〃⌒o⌒)b

 簡単な方法としては、リストのどこかにカーソルを置いた状態で、
 メニューバーのデータ → フォーム と進んで、新規ボタンで入力できます。
 項目を入力しTab キーで次の項目へ移動、Enter キーでシートへ入力できます。

 列見出しを含むリストまたは選択範囲の行を特定できません。このコマンドを実行するには、それらを特定する必要があります。

 と、注意される場合はそのまま OK ボタンを押してもいいですが、
 一番上の項目名(氏名、住所など)の行に色をつける等、データ行と区別できるようにすれば注意されなくなります。
 (じむやん)

 おおぉ〜
 これ便利ですね〜♪
 
 初めて知りました。
 じむやんさん感謝^^
 
 (キリキ)(〃⌒o⌒)b

 書き込んでいる間に回答がありましたごめんなさい。
 一応書いたので記載させていただきます。
 記載していただいた方法は後ほど試させていただきます。

 申し訳ございません。私にはシートの最終行を取得して、1行下に記入(転記)する
 と言う意味が理解できませんでした。無知でスミマセン。

 データを入力しているシートは「1」と「2」の行が全てタイトルとなっています。
 タイトルが2行になっているのは「1」の行が大項目で「2」の行が小項目に分かれて
 いる為です。
 「A」列より順にaE氏名・フリガナ・生年月日・〒・住所・電話番号・・・「AG」
 データは「A3」から始まっています。「A3」セルはbフ1から始まっています。
 sheet1を単票入力とし、sheet2をデータなんてことは可能でしょうか?
 sheet1の単票に1行分の全てのデータを入力するとsheet2の行の上から順に
 入力でき、入力が終わると又次のデータを同じ単票に入力するとsheet2の次の行に
 入力できるなんてのが出来るとうれしいのですが。

 sheet1   「A」  「B」  「C」  「D」  「E」  「F」
 「1」     a@  氏名  フリガナ 生年月日  〒     住所
 「2」  入力     入力     入力     入力     入力     入力
 「3」   電話番号  DATA@   DATAA   DATAB   DATAC   DATAD
 「4」  入力     入力     入力     入力     入力     入力
 「5」    DATAE   DATAF   DATAG   DATAH   DATAI   DATAJ
 「6」  入力     入力     入力     入力     入力     入力
 「7」    DATAK   DATAL   DATAM   DATAN   DATAO   DATAP
 「8」  入力     入力     入力     入力     入力     入力
 上記のように一目で見れる範囲に項目を作り、各項目の下の行、
 「2」・「4」・「6」・「8」の行がデータ入力のセルなんてどうでしょう?
 見易さと入力のし易さが確保できればこの形に拘らなくても良いのですが、
 何しろ無知なものですからこれくらいしか思いつきません。

 sheet2   「A」  「B」  「C」  「D」  「E」  「F」・・・「AG」
 「1」             大 項 目 見 出 し 行               ・・・「AG」
 「2」   a@  氏名  フリガナ 生年月日  〒     住所 ・・・「AG」
 「3」    DATA     DATA     DATA     DATA     DATA     DATA ・・・「AG」
 「4」  DATA     DATA     DATA     DATA     DATA     DATA ・・・「AG」
 「5」    DATA     DATA     DATA     DATA     DATA     DATA ・・・「AG」
 sheet1で入力したデータがsheet2の「A3」から横一列に入力されるなんてのは
 可能でしょうか?
 この一つのデータだけを転記することくらいなら私にも出来るのですが、
 問題はsheet1の入力単票を1個しか作らず、同じ単票に次々と入力し、
 sheet2にデータの蓄積が出来ないか?と言うところです。宜しくお願いいたします。
 sheet1とsheet2を分けなくてはいけないものか、そんなことも判らないで書いて
 おります。

 もうひとつ追加で書かせていただきます。
 データ項目により入力する部署が異なりますので、出来れば
 入力シートを3つくらいに分けたいのですが、可能でしょうか?
 (ET)

 色好い反応をもらった試しがないのですが、もう少し営業してみます。
 考え方は
   作業行を作り、そこに各セルをリンクして横一行に表示する。
   データの蓄積は、その一行をコピーして、値張り付けを行う。
 と言うものです。

 関数は「=セル番地」と言う書き方ものと、後は「マクロの記録の方法」のスキルが必要です。

 ライブラリより【マクロの自動記録】
http://www.excel.studio-kazu.jp/lib/e4b/e4b.html
 過去ログ
[[20060913132204]]『2つのシートを連動させたい。』(ゆうです)

 ちなみに、入力後「マクロを実行させる」と言う動作が必要です。

 (HANA)

 ETさんのスレッドは文体もしっかりなさっとるし質問内容も手ぇに取るように伝わっ
 てきて、小気味がよろしいで。
 同時に一肌脱いでみようかっちゅう気ぃにもさせてくれますワ、えぇ。
 で、こんなんはどうでっか?

 Sheet1にはC12までデータが入力されると解釈してよろしいわなぁ。
 Sheet2に項目やらなにやらを書き込み、Sheet1にもそれなりのデータをかきこみます。
 Sheet1のA14に転送とでも書き込んでおくんなはれ。

 \Sheet1/を右クリックしてコードを表示し、そこへ上半分のコードをコピペ
 します。
 そのままの状態で「挿入」→「標準モジュール」を選択し、真新しいモジュールへ
 下半分のコードをコピペします。
 他のシートからも入力したいとの事ですが、それはあんさんのご希望に添うた結果が
 得られてからにしまひょか。
 ×でエクセルに戻り、Sheet1のA15(転送と書かれた下のセル)に済み でも 済でも
 結構ですから入力してSheet2を開いてみてくらはい。
 どうでっか?こんな塩梅で?
 この済みと書かれたセルはデータが変更にならないと自動的には消えまへん。つまり
 このデータは既に転送されてますよっちゅうサインみたいなもんですワ。
        (弥太郎)
 'シートモジュールへ
 '---------------------
 Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("a1:f12")) Is Nothing Then
        Application.EnableEvents = False
        Range("a15") = ""
        Application.EnableEvents = True
        Exit Sub
    End If
    If Target.Address <> "$A$15" Then Exit Sub
        If Target Like "*済*" Then
            sht_name = ActiveSheet.Name
            転送 (sht_name)
        End If
 End Sub
 '標準モジュールへ
 '---------------------------
 Sub 転送(sht_name)
    Dim i As Long, n As Integer, j As Integer, data, tbl
    Dim maxrow As Long
    With Sheets(sht_name)
        tbl = Range("a1").Resize(12, 6).Value
        ReDim data(1 To 1, 1 To UBound(tbl, 2) * 6)
        For i = 2 To UBound(tbl, 1) Step 2
            For n = 1 To UBound(tbl, 2)
                j = j + 1
                data(1, j) = tbl(i, n)
            Next n
        Next i
    End With
    With Sheets("sheet2")
        maxrow = .Range("a" & Rows.Count).End(xlUp).Row + 1
        .Cells(maxrow, 1).Resize(, UBound(tbl, 2) * 6) = data
    End With

 End Sub

 あ、そうそう
 >色好い反応をもらった試しがないのですが
 エクセル堪能者はん、それは気ぃっちゅうもんでっせ。(笑
 私が語るまでもなく皆さん周知の事実ですからなぁ。講釈好きも(笑
 ETさん、解決の暁には是非色よい反応を彼に・・・
     (弥太郎)

 「キリキ」さんのおっしゃっている意味がやっと理解できましたので
 実行してみました。遅くなって申し訳ございません。
 ただ、このままではA4〜AD4 にデータが出てこなかったのですが?・・・
 表示させるには何か命令が必要なのでしょうか?無知ですみません。
 「じむやん」さんの方法については、すごく便利な方法で、私の理想に近いものでした。
 横スクロールは面倒だけど縦は見やすく容易に出来る。と思いますので・・・
 しかしながら少しだけ贅沢を言いますと、入力項目にドロップダウンが欲しいんですよね。
 それと、データ項目を増やしてみたら「項目オーバー」のエラーが出てしまいました。
 しかし、Excelにこんな機能があったなんてはじめて知りました!感激です。
 「HANA」さんの記載に関しては今から試してみます。マクロのことをあまり、と言うか全く知らないので
 今からよく読んで学習してみます。
 「弥太郎」さんマクロのことを全く知らない私でもご指示通りに行ったら出来ました。
 こう言う事がしたかったのです。ありがとうございます。ドロップダウンも使用できました。
 この場合sheet1にデータを入力するにあたり、分かりやすくする為に1セル毎に項目を設けることは可能でしょうか?
 sheet2の小項目と同じものが記載できれば項目の入力ミスが防げます。
 例えば下記の様な表を作り、「A」列に項目を設け「B」列に上から順にデータを入力していき、
 この「B」列のデータのみをsheet2の「3」列目から横一列に表示させたいのですが、可能でしょうか?
 要は、縦のデータを横に直すだけなのですが、この方法が可能だとしたら、入力項目を分けることも
 出来るような気が無知な私にも感覚的に沸いて来ます。
 sheet1   「A」    「B」
 「1」     a@     
 「2」  氏名
 「3」   フリガナ
 「4」   生年月日
 「5」     〒
 「6」  住所

 sheet2   「A」  「B」  「C」  「D」  「E」  「F」・・・
 「1」             大 項 目 見 出 し 行               ・・・
 「2」   a@  氏名  フリガナ 生年月日  〒     住所 ・・・
 「3」

 もし、これが可能であれば最高です。どうぞよろしくお願い致します。
 (ET)

 先ほどの要領で下のコードと差し替えてくらはい。
 Sheet1のD1に転送 D2に済みといれるようにしとります。
      (弥太郎)
 '----------------------
 Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("b1:b33")) Is Nothing Then
        Application.EnableEvents = False
        Range("d2") = ""
        Application.EnableEvents = True
        Exit Sub
    End If
    If Target.Address <> "$D$2" Then Exit Sub
        If Target Like "*済*" Then
            sht_name = ActiveSheet.Name
            転送 (sht_name)
        End If
 End Sub

 '-----------------------
 Sub 転送(sht_name)
    Dim maxrow As Long, tbl

    With Sheets(sht_name)
         tbl = .Range("b1").Resize(33).Value
    End With
    With Sheets("sheet2")
        maxrow = .Range("a" & Rows.Count).End(xlUp).Row + 1
        .Cells(maxrow, 1).Resize(, 33) = Application.Transpose(tbl)
    End With

 End Sub


 「弥太郎」さん、何とお礼を申し上げてよいやら!
 私がやりたかったことがパーフェクトに出来ました。
 只今感動に酔いしれております。
 今後、頑張ってマクロを学習しなくては!と思います。
 今しばらく教えていただいたものをあちこち触ってみようと思います。
 ちなみにこのような複雑な物を私みたいな者が独学でマスター出来るものなのでしょうか?不安です・・・
 今回教えていただいたものは、私の希望でB列のデータのみの自動転記ですが、
 例えばsheet1の「5」行目の項目のみ数字を1個1個分解して7個のセル、要するにB5〜H5までを抽出し
 sheet2のE3〜K3に抽出すると言うようなことは出来るのでしょうか?
 もしよろしければ可能性だけでも教えていただけませんでしょうか、理由は、現在このデータの
 sheet2の帳票をすでに作成しているところなので、もし出来る可能性があればsheet2のその場所に
 対応数のセルを充てておきたいと考えたからでございます。(後で挿入してすむことであれば良いのですが)
 セル個別に抽出したいデータとしては最大10桁の数字があります。
 また、部署別入力の方法も学習しなくては・・・今後ともよろしくお願い致します。
 ありがとうございました。
 (ET)

 マクロやと大抵の事はこなせます。
 ETはんの例え通り5行目がB5〜H5に広がっとるとして
 標準モジュールに下のコードを差し替えると多分イケると思いまっせぇ。
 ただ、データが無ければ空白行が吐き出されますけどなぁ。
 まぁ、あれこれ捻ってみてくらはい。

 >独学でマスター出来るものなのでしょうか
 勿論大丈夫でっせ。あんさんみたいに論理力を以てすれば早晩マスターでけます。
 これはわたしが保証しますワ。
 ぐぁんばっておくんなはれ。
       (弥太郎)
 '---------------
 Sub 転送(sht_name)
    Dim maxrow As Long, y As Integer, tbl, x

    With Sheets(sht_name)
        tbl = .Range("b1").Resize(33, 7).Value
        ReDim x(1 To UBound(tbl, 1) + 7)
        For i = 1 To UBound(tbl, 1)
            If i = 5 Then
                For n = 1 To 7
                    y = y + 1
                    x(y) = tbl(i, n)
                Next n
            Else
                y = y + 1
                x(y) = tbl(i, 1)
            End If
        Next i
    End With
    With Sheets("sheet2")
        maxrow = .Range("a" & Rows.Count).End(xlUp).Row + 1
        .Cells(maxrow, 1).Resize(, UBound(tbl, 1) + 6) = x
    End With

 End Sub


 To 弥太郎様(←媚・笑)
 ど〜がんばっても「皆さん周知の事実ですからなぁ。」
 この事実が何を指すのか分かりません。
 昨日衝撃の事実が発覚してちょっと凹んでいますので
 (よって今日はおとなしくデスクワークなのですが・・・)
 ソフトな言葉でどんな事実なのか教えて下さい。
 「色好い反応をもらった試しがない」なんてこと?

 (HANA)

 弥太郎先生ありがとうございました。がんばります。
 (ET)

 HANAちゃうちゃう! かなわんなぁ、もう〜(笑
 あ、いや、私の舌足らずでえらい誤解を招いたみたいでんなぁ。
 「HANAはんのエクセルの堪能振りは衆目の一致するところ」と、こう申し上げたつもり
 なんですけど、そうは受け取れまへんでしたかぁ?(笑
 いけまへんなぁ、自分ではさういう心算で書いたんですけど、伝わってなかったら心算
 もへったくれもありまへんわなぁ。
 すいません。
 実際はさういう、「敬意を払った周知の事実」ですんで、堪忍したってや。
 あ、それはそうと報復する機会を虎視眈々と狙ってますねんけど、なかなかチャンスが
 訪れまへんワ、残念ながら(笑
 忘れん内になんとかと思案しとりますけど・・・(笑
      (弥太郎)


 わぁぁ、弥太郎さん、それはダメですよ。
 そんな行間読めっこありません。
 (根がネガティブなのに、輪をかけて凹んでますし・・・。)

 でも、せっかく頂けるというのなら
 美味しく頂戴いたします。
 ありがとうございます。(これで少しは凸。)

 ・・・・美味しく頂いちゃいましたが、「虎視眈々と」だなんて、
 太らせたってHANAは美味しくなりませんからね。

 そういえば「報復」って、年内を逃げ切ればチャラでしたよね。(笑)

 (HANA)

初めて利用させていただきます。
こんなことができないかなぁ・・・と色々検索していたらこちらにたどりつきました。

ETさんがご質問されている、
Sheet1に縦に入力したものをSheet2に横に表示
というものが私のやりたい事だったので
弥太郎さんが書いて下さっている通りにやってみましたら
出来ました!

何を当たり前な事を・・・
と思われるかもしれませんが、
マクロの存在は知ってても使ったことが無いド素人なものですので、Sheet2に反映されているのを
見た時は感動しました!

前置きが長くなってしまいましたが
ひとつご質問があります。
Sheet1のB1に入力されたものをSheet2のD4に反映させたいのですが順次B2→E4・B3→F4
としたいのですが

どうすればいいのかわかりません。
どうぞご教授下さい。

(SS)


はまってしまいしまた。。。
明日起きれるかな?

ネットでF1キーで単語の説明が見れるというのを見つけ
色々試してみてなんとか右にはずらせたのですけど
下にはどうしても出来ません(T_T)
右にずらすのも下記で大丈夫なのでしょうか・・・?

入力シート(Sheet1)の反映させたいものの入力をD5から入力すると
Sheet2ではE2〜に反映されました。
済の入力はG6にするようにしました。

手を加えたのは

3行目の b1:b33→d1:d33
5行目の d2→g6
9行目の "$d$2"→"$G$6"

Sub 転送(sht_name)以下の
4行目の b1→d1
です

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("d1:d33")) Is Nothing Then
        Application.EnableEvents = False
        Range("g6") = ""
        Application.EnableEvents = True
        Exit Sub
    End If
    If Target.Address <> "$G$6" Then Exit Sub
        If Target Like "*済*" Then
            sht_name = ActiveSheet.Name
            転送 (sht_name)
        End If
 End Sub

Sub 転送(sht_name)

    Dim maxrow As Long, tbl

    With Sheets(sht_name)
         tbl = .Range("d1").Resize(33).Value
    End With
    With Sheets("sheet2")
        maxrow = .Range("a" & Rows.Count).End(xlUp).Row + 1
        .Cells(maxrow, 1).Resize(, 33) = Application.Transpose(tbl)
    End With

 End Sub

手間ですが、Sheet2の結果を別シートに反映させて
希望のものを作ることは出来そうですけれど
後学の為に正解を教えて頂きたいです。
よろしくお願いします。

今、ふっと思ったのですけど
このような、他の方の質問のコメントで質問するのは
マナー違反なのでしょうか?
そうでしたら申し訳ありません。

(SS)


 >他の方の質問のコメントで質問するのはマナー違反なのでしょうか? そうでしたら申し訳ありません。

 この板のカルチャーは、よくわからないけど、一般論としてマナー違反というより、たとえば、新しく更新されているので
回答者が、これを開いてみると、ずいぶん昔のスレで、延々とやりとりが・・・というあたりで、最後まで読んでくれないかもしれないね。

 だから、新規スレを立ち上げて、過去ログとして、このスレをリンクさせた上で、これを利用して
こんなことがしたいけど・・・
と持って行った方が、回答が早いかもね。

 (ぶらっと)

ぶらっとさんありがとうございます。
早速、新規で質問させていただきました。

(SS)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.