:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

อยากทราบวิธีตัดช่องว่างใน VBA

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
hydrotaxonomy
Member
Member
Posts: 23
Joined: Tue Jul 17, 2012 11:35 pm

อยากทราบวิธีตัดช่องว่างใน VBA

#1

Post by hydrotaxonomy »

คือ ต้องการให้ inputBox รับข้อความ เช่น the treasure is buried in the garden
แล้วต้องการให้ข้อความดังกล่าว ติดกันเป็นแบบนี้คะ thetreasureisburiedinthegarden

ต้องทำอย่างไรคะ ขอบคุณสำหรับทุกคำตอบล่วงหน้าคะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#2

Post by snasui »

:D กรณีการเขียน VBA ให้ลองเขียนมาก่อน แนบไฟล์ แนบ Code ระบุมาด้วยว่าติดที่ Module ใด Procedure ชื่อว่าอะไร จะได้เข้าถึงข้อมูลได้โดยไวครับ

การตัดช่องว่างสามารถใช้ Replace ได้ครับ เช่น Replace(x," ","")
hydrotaxonomy
Member
Member
Posts: 23
Joined: Tue Jul 17, 2012 11:35 pm

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#3

Post by hydrotaxonomy »

หนูเพิ่งเริ่มต้นเรียนการเขียน VBA คะ แล้วหนูมีแต่ไฟล์ที่เป็น excel ที่ต้องเขียน vba เพื่อไปเรียกใช้นะคะ แต่หนูยังเริ่มต้นไม่ถูก
ไฟล์ที่แนบมา คือการถอดรหัส
กำนหนดให้ตัวแปร key และ message เป็นตัวแปรประเภท String
หนูต้องการ กรอก ค่า key เป็นตัวภาษาอังกฤษตัวใหญ่ และ message เป็นตัวภาษาอังกฤษตัวเล็ก
โดยที่ message สามารถมีช่องว่างได้ ตอนที่กรอกลงใน inputbox
แต่การเข้ารหัส ที่ต้องใช้ค่า key และค่า message เปรียบเทียบกันนั้น message จะต้องไม่มีช่องว่าง
เช่น key : "BLOOMINGTON"
message : "the fun has arrived"

message ใหม่ ที่ต้องไปทำการเปรียบเทียบ จะต้องเป็น thefunhasarrived
และค่า key ก็ต้องมีจำนวนเท่ากับตัวจำนวนตัวอักษร message ใหม่ ในที่นี้คือ BLOOMINGTONBLOOM
หลังจากนั้นทำการดึง key และ message มาเปรียบเทียบทีละตัว โดยเทียบจากตารางใน excel จากไฟล์ที่แนบมา
โดย column เป็น ตัวอักษรของ key และ row เป็นตัวอักษรของ message
ในที่นี้ คือ B กับ t เทียบกันจะได้ U
L กับ h เทียบกันจะได้ S
หนูเริ่มต้นตัดช่องว่างใน key ยังไม่ได้นะคะ เลยยังเขียนVBA มาให้ดูไม่ได้ รบกวนช่วยให้คำแนะนำด้วยนะคะ ขอบคุณคะ
Attachments
Test.xls
(33 KiB) Downloaded 19 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#4

Post by snasui »

:D จากคำอธิบายและไฟล์แนบ อ่านแล้วไม่เข้าใจและไม่เห็นภาพจึงไม่สามารถแนะนำได้ครับ กรณีเขียน VBA ไม่ได้ควรศึกษาตามตำรามาเป็นลำดับ ติดตรงไหนสามารถถามมาได้เรื่อย ๆ ครับ
hydrotaxonomy
Member
Member
Posts: 23
Joined: Tue Jul 17, 2012 11:35 pm

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#5

Post by hydrotaxonomy »

หนูต้องการ รับค่า message มา โดย ตอนรับมี ช่องว่าง หนูจะตัดช่องว่างนั้นทิ้ง ต้องทำอย่างไรคะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#6

Post by snasui »

:shock: ตอบไปแล้วครับ :ard:
snasui wrote: :D กรณีการเขียน VBA ให้ลองเขียนมาก่อน แนบไฟล์ แนบ Code ระบุมาด้วยว่าติดที่ Module ใด Procedure ชื่อว่าอะไร จะได้เข้าถึงข้อมูลได้โดยไวครับ

การตัดช่องว่างสามารถใช้ Replace ได้ครับ เช่น Replace(x," ","")
วังวู ช่ง
Silver
Silver
Posts: 811
Joined: Thu May 31, 2012 2:27 pm
Location: Laos
Excel Ver: MS Excel for office 365 MSO
Contact:

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#7

Post by วังวู ช่ง »

กรณีเขียน VBA ไม่ได้ควรศึกษาตามตำรามาเป็นลำดับ
ขอโทดครับท่านอาจารย์ครับ ตำราหาได้ที่ไหนครับ ผมสนใจตำรา VBA มากครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#8

Post by snasui »

:D สำหรับตำราที่ผมจะบอกตาม Link นี้คงต้องหาตามร้านใหญ่ ๆ ครับ :arrow: http://www.snasui.com/viewtopic.php?p=7567#p7567
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#9

Post by akung »

ถ้าเริ่มต้นไม่ถูกผมแนะให้ลองใช้ Marco ทำการ Record ดูว่ามันทำงานอย่างไร แล้วเขาไปดู code ว่าเขียนอย่างไรครับ :D
วังวู ช่ง
Silver
Silver
Posts: 811
Joined: Thu May 31, 2012 2:27 pm
Location: Laos
Excel Ver: MS Excel for office 365 MSO
Contact:

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#10

Post by วังวู ช่ง »

จิงๆแล้วผ่านมาผมใช้อย่างนั้นถืว่า 100% ครับ
hydrotaxonomy
Member
Member
Posts: 23
Joined: Tue Jul 17, 2012 11:35 pm

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#11

Post by hydrotaxonomy »

หนูจะดึงค่า key มาทีละตัว เเล้วไปหาใน Column A เเล้วให้มันส่งค่าเเถวกลับมาเก็บไว้ใช้ หนูต้องเขียนยังไงคะ
Attachments
Test.xls
(50 KiB) Downloaded 15 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#12

Post by snasui »

:D ดึงค่า Key จากไหนมาทีละตัวครับ ลองอธิบายวิธีการเป็นขั้น ๆ มาตามลำดับ และจาก Code ที่แนบมา ติดปัญหาใดครับ
hydrotaxonomy
Member
Member
Posts: 23
Joined: Tue Jul 17, 2012 11:35 pm

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#13

Post by hydrotaxonomy »

ดึงค่าจากตัวแปร long_key ทีละตัวมาตรวจว่าตรงกับใน column A แถวไหน แล้วให้ส่งค่าแถวกลับมาเก็บไว้

หลังจากนั้นทำการดึงค่าจากตัวแปร plaintext ทีละตัวมาตรวจว่าตรงกับ column ใด ใน R1

นำค่าตัวอักษรที่ได้ในแต่ละรอบมาเรียงต่อกัน ซึ่งจะได้คำใหม่ขึ้นมา

หนูต้องการทำแบบนี้นะคะ แต่หนูเขียนต่อไม่ได้แล้ว เลยมาถามผู้รู้คะ

รบกวนช่วยให้คำแนะนำด้วยนะคะ ขอบคุณคะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#14

Post by snasui »

:D Code ที่เขียนมาผมลองปรับเพื่อให้กระชับเป็นตามด้านล่าง

Code: Select all

Public Sub Crypto01()
    Dim Key As String, PlainText As String, Longkey As String
    Key = InputBox("Enter the key of encryption")
    Key = UCase(Key)
    PlainText = InputBox("Enter the message that you want to send")
    PlainText = Replace(PlainText, " ", "")
    Longkey = Left(Application.WorksheetFunction.Rept(Key, 10), Len(PlainText))
    MsgBox "Key = " & Key
    MsgBox "PlainText = " & PlainText
    MsgBox "Longkey = " & Longkey
End Sub
ส่วนที่อธิบายเพิ่มเติมมายังไม่เข้าใจ
hydrotaxonomy wrote:ดึงค่าจากตัวแปร long_key ทีละตัวมาตรวจว่าตรงกับใน column A แถวไหน แล้วให้ส่งค่าแถวกลับมาเก็บไว้
เก็บไว้ในตัวแปรใด :?:
hydrotaxonomy wrote:หลังจากนั้นทำการดึงค่าจากตัวแปร plaintext ทีละตัวมาตรวจว่าตรงกับ column ใด ใน R1
R1 คืออะไร :?:
hydrotaxonomy wrote:นำค่าตัวอักษรที่ได้ในแต่ละรอบมาเรียงต่อกัน ซึ่งจะได้คำใหม่ขึ้นมา
ช่วยยกตัวอย่างให้เป็นภาพด้วยครับ ยกตัวอย่างข้อความที่คีย์ และยกตัวอย่างคำตอบที่ถูกต้องว่าควรได้เป็นอย่างไร เพื่อจะได้เข้าใจตรงกัน สามารถทำลูกศรโยงไปโยงมา ใส่สี ตีเส้นได้เต็มที่ครับ
hydrotaxonomy
Member
Member
Posts: 23
Joined: Tue Jul 17, 2012 11:35 pm

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#15

Post by hydrotaxonomy »

สมมุติ key = pop
message = the best

จะได้ Plaintext = thebest
Longkey = POPPOPP

หนูต้องการเอา Longkey P

เทียบกับ Plaintext t

ในที่นี้ จับคู่เทียบได้ Pt | Oh | Pe | Pb | Oe | Ps | Pt

จากตารางจะได้ IVTQSHI

แล้วก็นำตัวอักษรที่เทียบจากตาราง มาเรียงเป็นคำใหม่ใช้ชื่อตัวแปรว่า encode แล้วแสดงผลคะ

แต่หนูไม่รู้ว่าจะ mid แล้ววน loop ยังไงนะคะ

รบกวนช่วยให้คำแนะนำด้วยคะ ขอบคุณคะ
Attachments
vba5.jpg
vba5.jpg (90.39 KiB) Viewed 449 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#16

Post by snasui »

:D ลองดู Code ตามด้านล่างครับ

Code: Select all

Public Sub Crypto01()
    Dim Key As String, PlainText As String
    Dim Longkey As String, Encode As String
    Dim t As String, i As Integer
    Key = InputBox("Enter the key of encryption")
    Key = UCase(Key)
    PlainText = InputBox("Enter the message that you want to send")
    PlainText = Replace(PlainText, " ", "")
    Longkey = Left(Application.Rept(Key, 10), Len(PlainText))
    Encode = ""
    For i = 1 To Len(Longkey)
        With Sheets("Sheet1")
            t = Application.Index(.Range("A2:Z27") _
                , Application.Match(Mid(PlainText, i, 1), .Range("A2:A27"), 0) _
                , Application.Match(Mid(Longkey, i, 1), .Range("A1:Z1"), 0))
        End With
        Encode = Encode & t
    Next i
    MsgBox Encode
End Sub
hydrotaxonomy
Member
Member
Posts: 23
Joined: Tue Jul 17, 2012 11:35 pm

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#17

Post by hydrotaxonomy »

ขอบคุณสำหรับคำแนะนำคะ หนูขอเรียกว่าอาจารย์แล้วกันนะคะ ขอบคุณจริงๆ คะ อาจารย์ช่วยหนูได้มากเลยคะ
hydrotaxonomy
Member
Member
Posts: 23
Joined: Tue Jul 17, 2012 11:35 pm

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#18

Post by hydrotaxonomy »

อาจารย์คะ ถ้าหนูจะแปลงค่า โดยเทียบ encode กับ longkey มาเทียบกันทีละตัว โดยใช้ความยาวของตัวแปร message ที่ยังไม่ได้ตัดช่องว่าง
ซึ่งมันจะไปเก็บค่าไว้ในตัวแปร decode

จากตัวอย่าง
message = the best
Longkey = POPPOPP
encode = IVTQSHI

จะได้ decode ออกมาเป็น the best

ซึ่งความยาว Longkey = 7
แต่ความยาว message = 8

แต่มัน debug คะ ช่วยแก้ไขด้วยนะคะ

Code: Select all

Public Sub Crypto01()
    Dim Key As String, Message As String, PlainText As String, Longkey As String, DecodeSpace As String, _
    Decode As String
    Dim i As Integer, p As Integer
    Key = InputBox("Enter the key of encryption")
    Key = UCase(Key)
    Message = InputBox("Enter the message that you want to send")
    PlainText = Replace(Message, " ", "")
    Longkey = Left(Application.WorksheetFunction.Rept(Key, 10), Len(PlainText))
    MsgBox "Key = " & Key
    MsgBox "PlainText = " & PlainText
    MsgBox "Longkey = " & Longkey
    For i = 1 To Len(Longkey)
        With Sheets("Sheet1")
            t = Application.Index(.Range("A2:Z27") _
                , Application.Match(Mid(PlainText, i, 1), .Range("A2:A27"), 0) _
                , Application.Match(Mid(Longkey, i, 1), .Range("A1:Z1"), 0))
        End With
        Encode = Encode & t
    Next i
    MsgBox Encode
    For p = 1 To Len(Message)
        With Sheets("Sheet1")
            If DecodeSpace = " " Then
                Decode = Decode + " "
                    i = i - 1
            Else
                i = Application.Index(.Range("B2:Z27") _
                    , Application.Match(Mid(Encode, i, 1), .Range("B2:Z27"), 0))
                    , Application.Match(Mid(Message, i, 1), .Range("A1:Z1"), 0))
               Decode = Decode & p
        End If
        End With
    Next p
    MsgBox Decode
   
End Sub

User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#19

Post by snasui »

:D ลองยกตัวอย่างการเปรียบเทียบ Encode (IVTQSHI) กับ Longkey (POPPOPP) เหมือนการอธิบายในความเห็นก่อนหน้ามาให้ดูหน่อยครับว่ามันได้ผลลัพธ์ตัวแปร Decode เป็นคำว่า the best ได้อย่างไร
hydrotaxonomy
Member
Member
Posts: 23
Joined: Tue Jul 17, 2012 11:35 pm

Re: อยากทราบวิธีตัดช่องว่างใน VBA

#20

Post by hydrotaxonomy »

ตอนที่ decode มันต้องใช้ความยาวของ message ซึ่งมันมีช่องว่าง

คือหนูต้องการค่า decode กลับมาให้ได้ เหมือนค่า message ที่เราป้อนเข้าไปนะคะ
Attachments
vba6.jpg
vba6.jpg (55.63 KiB) Viewed 431 times
Post Reply